阅读(1129) (8)

npm 安装 install

2021-09-06 13:45:41 更新

安装包

概要

npm install (with no args, in package dir)
npm install [<@scope>/]<name>
npm install [<@scope>/]<name>@<tag>
npm install [<@scope>/]<name>@<version>
npm install [<@scope>/]<name>@<version range>
npm install <git-host>:<git-user>/<repo-name>
npm install <git repo url>
npm install <tarball file>
npm install <tarball url>
npm install <folder>


alias: npm i
common options: [-P|--save-prod|-D|--save-dev|-O|--save-optional] [-E|--save-exact] [-B|--save-bundle] [--no-save] [--dry-run]

详情

此命令安装一个包,以及它所依赖的任何包。如果包具有包锁,或npm shrinkwrap文件,或yarn lock文件,则依赖项的安装将由该文件驱动,并遵循以下优先顺序:

  • npm-shrinkwrap.json
  • package-lock.json
  • yarn.lock

请参考package-lock.jsonnpm shrinkwrap

一个package是:

  • a) 包含由package.json文件描述的程序的文件夹
  • b) 包含 (a) 的 gzip 压缩包
  • c) 解析为 (b) 的网址
  • d) 与 (c) 一起在注册表发布的<name>@<version>(参见npm-registry)。
  • e) 指向(d)的<name>@<tag>(请参考npm-dist-tag)。
  • f) 具有满足 (e) 的lastest标签的<name>
  • g) 解析为 (a)的<git remote url>

即使你从来没有发布过你的包,如果你只是想写一个节点程序(a),或者如果你还希望打包成 tarball (b) 能够轻松地安装到其他地方,你仍然可以从使用 npm 中获得很多好处。

  • npm install (在包目录中,没有参数):
    在本地 node_modules 文件夹中安装依赖项。
    在全局模式下(即使用-g--global附加到命令),它将当前包上下文(即当前工作目录)安装为全局包。
    默认情况下,npm install将安装所有列为依赖项的模块package.json
    使用--production标志(或当NODE_ENV环境变量设置为production),npm 将不会安装 devDependencies.
    注意:--production在向项目添加依赖项时,该标志没有特殊含义。
  • npm install <folder>: 将包安装在目录中作为当前项目中的符号链接。它的依赖项将在链接之前安装。如果<folder>位于项目的根目录中,它的依赖项可能会node_modules像其他类型的依赖项一样被提升到顶层。
  • npm install <tarball file>: 安装位于文件系统上的软件包。注意:如果你只想将 dev 目录链接到你的 npm 根目录,你可以使用npm link.
    压缩包要求:
    • 文件名必须使用.tar.tar.gz, 或.tgz作为扩展名。
    • 包内容应位于 tarball 内的子文件夹中(通常称为package/)。npm 在安装包时剥离一个目录层(相当于tar x --strip-components=1运行)。
    • 该包必须包含一个package.json具有nameversion属性的文件。 例子:
      npm install ./package.tgz

  • npm install <tarball url>: 获取 tarball url,然后安装它。为了区分这个选项和其他选项,参数必须以http://https://开头 例子:
    npm install https://github.com/indexzero/forever/tarball/v0.5.6

  • npm install [<@scope>/]<name>: 进行<name>@<tag>安装,<tag>“标签”配置在哪里。(请参阅 [npm-config](https://www.npmjs.cn/misc/config)。配置的默认值为latest。)
    在大多数情况下,这将安装latest在 npm 注册表中标记为的模块版本 。
    例子:
    npm install sax

  • npm install``dependencies默认情况下将任何指定的包保存到。此外,您可以使用一些额外的标志来控制它们的保存位置和方式:
    • -P, --save-prod: 包将出现在你的dependencies. 这是默认值,除非-D-O存在。
    • -D, --save-dev: 包将出现在你的devDependencies.
    • -O, --save-optional: 包将出现在你的optionalDependencies.
    • --no-save:防止保存到dependencies.

使用上述任何选项将依赖项保存到 package.json 时,还有两个额外的可选标志:

  • -E, --save-exact:保存的依赖项将被配置为一个确切的版本,而不是使用 npm 的默认 semver 范围操作符。
  • -B, --save-bundle:保存的依赖项也将添加到您的bundleDependencies列表中。

    此外,如果你有一个npm-shrinkwrap.jsonpackage-lock.json那么它也将被更新。
    <scope>是可选的。该包将从与指定范围关联的注册表中下载。如果没有注册表与给定范围相关联,则假定为默认注册表。见npm-scope
    注意:如果你没有在范围名称中包含 @-symbol,npm 会将其解释为 GitHub 存储库,请参见下文。范围名称也必须后跟斜杠。
    例子:

    npm install sax
    npm install githubname/reponame
    npm install @myorg/privatepackage
    npm install node-tap --save-dev
    npm install dtrace-provider --save-optional
    npm install readable-stream --save-exact
    npm install ansi-regex --save-bundle

    注意:如果<name>当前工作目录中有一个文件或文件夹,那么它会尝试安装它,并且只有在它无效时才尝试按名称获取包。

  • npm install [<@scope>/]<name>@<tag>: 安装指定标签引用的包版本。如果该包的注册表数据中不存在该标记,则此操作将失败。

例子:

    npm install sax@latest
    npm install @myorg/mypackage@latest

  • npm install [<@scope>/]<name>@<version range>: 安装与指定版本范围匹配的软件包版本。这将遵循解决依赖项中描述的相同规则package.json。 请注意,大多数版本范围必须放在引号中,以便您的 shell 将其视为单个参数。
    例子:
    npm install sax@">=0.1.0 <0.2.0"
    npm install @myorg/privatepackage@">=0.1.0 <0.2.0"

  • npm install <git remote url>: 从托管的 git 提供程序安装包,并使用git. 对于完整的 git 远程 url,只会尝试该 URL。

    <protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish> | #semver:<semver>]

    <protocol>是以下之一gitgit+sshgit+httpgit+https, 或 git+file
    如果#<commit-ish>提供,它将用于准确克隆该提交。如果 commit-ish 具有格式#semver:<semver>,<semver>可以是任何有效的 semver 范围或确切版本,并且 npm 将在远程存储库中查找与该范围匹配的任何标签或引用,就像查找注册表依赖项一样。如果两者都未指定#<commit-ish>或未#semver:<semver>指定,则使用存储库的默认分支。
    如果存储库使用子模块,则这些子模块也将被克隆。
    如果正在安装的包包含prepare脚本,则在打包和安装包之前dependenciesdevDependencies将安装其和脚本, 并运行准备脚本。
    以下 git 环境变量被 npm 识别,并会在运行 git 时添加到环境中:

    • GIT_ASKPASS
    • GIT_EXEC_PATH
    • GIT_PROXY_COMMAND
    • GIT_SSH``GIT_SSH_COMMAND
    • GIT_SSL_CAINFO
    • GIT_SSL_NO_VERIFY

    有关详细信息,请参阅 git 手册页。
    例子:

    npm install git+ssh://git@github.com:npm/cli.git#v1.0.27
    npm install git+ssh://git@github.com:npm/cli#semver:^5.0
    npm install git+https://isaacs@github.com/npm/cli.git
    npm install git://github.com/npm/cli.git#v1.0.27
    GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://git@github.com:n

  • npm install <githubname>/<githubrepo>[#<commit-ish>]:

  • npm install github:<githubname>/<githubrepo>[#<commit-ish>]: 在安装该软件包https://github.com/githubname/githubrepo通过尝试使用克隆它git

如果#<commit-ish>提供,它将用于准确克隆该提交。如果 commit-ish 具有格式#semver:<semver>,<semver>可以是任何有效的 semver 范围或确切版本,并且 npm 将在远程存储库中查找与该范围匹配的任何标签或引用,就像查找注册表依赖项一样。如果两者都未指定#<commit-ish>或未#semver:<semver>指定,则master使用。

与常规git的依赖,dependencies并且devDependencies将安装如果包有一个prepare脚本,做包,然后再安装。

例子:

    npm install mygithubuser/myproject
    npm install github:mygithubuser/myproject

  • npm install gist:[<githubname>/]<gistID>[#<commit-ish>|#semver:<semver>]: 在安装该软件包https://gist.github.com/gistID通过尝试使用克隆它git。与要点关联的 GitHub 用户名是可选的,不会保存在package.json.

与常规git的依赖,dependencies并且devDependencies将安装如果包有一个prepare脚本,做包,然后再安装。

例子:

    npm install gist:101a11beef

  • npm install bitbucket:<bitbucketname>/<bitbucketrepo>[#<commit-ish>]: 在安装该软件包https://bitbucket.org/bitbucketname/bitbucketrepo 通过尝试使用克隆它git

如果#<commit-ish>提供,它将用于准确克隆该提交。如果 commit-ish 具有格式#semver:<semver>,<semver>可以是任何有效的 semver 范围或确切版本,并且 npm 将在远程存储库中查找与该范围匹配的任何标签或引用,就像查找注册表依赖项一样。如果两者都未指定#<commit-ish>或未#semver:<semver>指定,则master使用。

与常规git的依赖,dependencies并且devDependencies将安装如果包有一个prepare脚本,做包,然后再安装。

例子:

    npm install bitbucket:mybitbucketuser/myproject

  • npm install gitlab:<gitlabname>/<gitlabrepo>[#<commit-ish>]: 在安装该软件包https://gitlab.com/gitlabname/gitlabrepo 通过尝试使用克隆它git

如果#<commit-ish>提供,它将用于准确克隆该提交。如果 commit-ish 具有格式#semver:<semver>,<semver>可以是任何有效的 semver 范围或确切版本,并且 npm 将在远程存储库中查找与该范围匹配的任何标签或引用,就像查找注册表依赖项一样。如果两者都未指定#<commit-ish>或未#semver:<semver>指定,则master使用。

与常规git的依赖,dependencies并且devDependencies将安装如果包有一个prepare脚本,做包,然后再安装。

例子:

    npm install gitlab:mygitlabuser/myproject
    npm install gitlab:myusr/myproj#semver:^5.0

你可以组合多个参数,甚至多种类型的参数。例如:

npm install sax@">=0.1.0 <0.2.0" bench supervisor

--tag参数将应用于所有指定的安装目标。如果存在具有给定名称的标记,则标记版本优先于较新版本。

--dry-run参数将以通常的方式报告安装会在没有实际安装任何东西的情况下完成的操作。

--package-lock-only参数只会更新package-lock.json, 而不是检查node_modules和下载依赖项。

即使磁盘上存在本地副本,-for--force参数也会强制 npm 获取远程资源。

npm install sax --force

-g--global参数会导致NPM在全球范围内,而不是在本地安装包。见[npm-folders](https://www.npmjs.cn/files/folders)

--global-style参数将导致 npm 将包安装到您的本地node_modules文件夹中,其布局与全局node_modules文件夹使用的布局相同。只有您的直接依赖项会显示在其中, node_modules并且它们所依赖的所有内容都将在其node_modules文件夹中展平 。这显然会消除一些重复数据删除。

--ignore-scripts参数将导致 npm 不执行 package.json 中定义的任何脚本。见[npm-scripts](https://www.npmjs.cn/misc/scripts)

--legacy-bundling参数将导致 npm 安装包,以便 1.4 之前的 npm 版本,例如 node 0.8 中包含的版本,可以安装该包。这消除了所有自动重复数据删除。 --link在某些情况下,该参数将导致 npm 将全局安装链接到本地​​空间。

--no-bin-links参数将阻止 npm 为包可能包含的任何二进制文件创建符号链接。

--no-optional参数将阻止安装可选的依赖项。

--no-shrinkwrap参数将忽略可用的包锁定或收缩包装文件并使用 package.json 代替。

--no-package-lock参数将阻止 npm 创建 package-lock.json文件。当使用 package-lock 的禁用 npm 运行时,安装时不会自动修剪您的节点模块。

--nodedir=/path/to/node/source参数将允许 npm 找到节点源代码,以便 npm 可以编译本机模块。

所述--only={prod[uction]|dev[elopment]}参数将导致或者仅 devDependencies或仅非devDependencies不管要安装NODE_ENV

--no-audit参数可用于禁止向配置的注册表发送审计报告。有关[npm-audit](https://www.npmjs.cn/cli/audit)发送内容的详细信息,请参阅。

[npm-config](https://www.npmjs.cn/misc/config)。许多配置参数对安装有一些影响,因为这是 npm 所做的大部分工作。

配置

请参阅config帮助文档。许多配置参数对安装有一些影响,因为这是 npm 所做的大部分工作。

以下这些是与安装相关的一些最常见的选项。

save 保存

  • 默认值:true
  • 类型:Boolean

布尔型将已安装的包作为依赖项保存到 package.json 文件中。

npm rm命令一起使用时,从 package.json 中删除依赖项。

save-exact 另存为

  • 默认值:false
  • 类型:true

保存到 package.json 的依赖项将使用确切的版本进行配置,而不是使用 npm 的默认 semver 范围运算符。

global 全局

  • 默认值:false
  • 类型:Boolean

global模式下运行,以便将包安装到prefix 文件夹而不是当前工作目录中。有关行为差异的更多信息,请参阅NPM 文件夹

  • 软件包安装到{prefix}/lib/node_modules文件夹中,而不是当前工作目录中。
  • bin 文件链接到 {prefix}/bin
  • 手册页链接到 {prefix}/share/man

global-style 全局风格

  • 默认值:false
  • 类型:Boolean

使 npm 以node_modules与全局node_modules文件夹相同的布局将包安装到本地文件夹中。只有你的直接依赖项会显示在其中,node_modules并且它们所依赖的所有内容都将在其node_modules文件夹中展平。这显然会消除一些重复数据删除。如果与 一起使用legacy-bundlinglegacy-bundling 将是首选。

legacy-bundling 继承捆绑

  • 默认值:false
  • 类型:Boolean

使 npm 安装包,以便 1.4 之前的 npm 版本,例如 node 0.8 中包含的版本,可以安装该包。这消除了所有自动重复数据删除。如果与global-style此选项一起使用将是首选。

strict-peer-deps 严格对等依赖

  • 默认值:false
  • 类型:Boolean

如果设置为true,并且--legacy-peer-deps未设置,则任何冲突peerDependencies都将被视为安装失败,即使 npm 可以根据非对等依赖关系合理猜测适当的解决方案。

默认情况下,peerDependencies依赖关系图中的深层冲突将使用最近的非对等依赖项规范来解决,即使这样做会导致某些包接收在其包peerDependencies对象中设置的范围之外的对等依赖项。

当执行此类和覆盖时,会打印警告,解释冲突和所涉及的包。如果--strict-peer-deps设置,则此警告被视为失败。

package-lock 包锁

  • 默认值:true
  • 类型:Boolean

如果设置为 falsepackage-lock.json在安装时忽略文件。如果savetrue,将组织编写package-lock.json

当包锁被禁用时,无关模块的自动修剪也将被禁用。要删除禁用包锁的无关模块,请使用npm prune.

omit 省略

  • 默认值:如果NODE_ENV环境变量设置为 'production',则为'dev ',否则为null
  • 类型:devoptionalpeer(可多次设置)

要从磁盘上的安装树中省略的依赖项类型。

请注意,这些依赖的仍然解决,加入 package-lock.jsonnpm-shrinkwrap.json文件。它们只是没有物理安装在磁盘上。

如果包类型同时出现在--include--omit列表中,则它将被包括在内。

如果生成的省略列表包含'dev',则NODE_ENV环境变量将被设置'production'为所有生命周期脚本。

ignore-scripts 忽略脚本

  • 默认值:false
  • 类型:Boolean

如果为true,则 npm 不会运行 package.json 文件中指定的脚本。

请注意,明确用于运行特定脚本的命令,例如 npm startnpm stopnpm restartnpm test, 并且npm run-script 如果ignore-scripts已设置仍将运行其预期脚本,但它们不会运行任何前置或后置脚本。

audit 审计

  • 默认值:true
  • 类型:Boolean

当为true时,将审计报告与当前 npm 命令一起提交到默认注册表和为范围配置的所有注册表。

bin-links

  • 默认值:true
  • 类型:Boolean

告诉 npm 为包可执行文件创建符号链接(或Windows上的.cmd垫片)。

设置为 false 使其不这样做。这可以用来解决一些文件系统不支持符号链接的事实,即使在表面上是 Unix 系统上。

fund 资金

  • 默认值:true
  • 类型:Boolean

当为true,在每个结尾处显示消息时,npm install 确认正在寻找资金的依赖项的数量。

dry-run 试运行

  • 默认值:false
  • 类型:Boolean

表示你不希望 npm 进行任何更改并且它应该只报告它会做的事情。这可以被传递到任何修改本地安装,例如,命令的installupdate, dedupeuninstall,以及packpublish。 注意:这不是由其他网络相关的命令,如兑现dist-tags, owner等等。

workspace 工作区

  • 默认:
  • 类型:String(可多次设置)

允许在当前项目的已配置工作区的上下文中运行命令,同时通过仅运行此配置选项定义的工作区进行过滤。

workspace配置的有效值为:

  • 工作区名称
  • 工作区目录的路径
  • 父工作区目录的路径(将导致选择所有嵌套工作区)

npm init命令设置时,可以将其设置为尚不存在的工作区的文件夹,以创建该文件夹并将其设置为项目中的全新工作区。

此值不会导出到子进程的环境中。

workspaces 工作区

  • 默认值:false
  • 类型:Boolean

启用在所有已配置工作区的上下文中运行命令。

此值不会导出到子进程的环境中。

算法

给定一个package{dep}结构:A{B,C}, B{C}, C{D},这个算法产生:

A
+-- B
+-- C
+-- D

也就是说,从 BC 的依赖关系由 A 已经导致 C 安装在更高级别的事实得到满足。D 仍然安装在顶层,因为没有与它冲突。

对于A{B,C}, B{C,D@1}, C{D@2},该算法产生:

A
+-- B
+-- C
   `-- D@2
+-- D@1

由于 BD@1 将安装在顶层,所以 C 现在必须为自己私下安装 D@2。该算法是确定性的,但如果以不同的顺序请求安装两个依赖项,则可能会生成不同的树。

有关npm 创建的特定文件夹结构的更详细说明,请参阅npm-folders