目录
npm-install
选择 CLI 版本
目录
概述
npm install [<package-spec> ...]aliases: add, i, in, ins, inst, insta, instal, isnt, isnta, isntal, isntall
描述
此命令安装一个包及其所有依赖包。如果包具有 package-lock、npm shrinkwrap 文件或 yarn lock 文件,则依赖项的安装将由该文件驱动,并遵守以下优先级顺序
npm-shrinkwrap.json
package-lock.json
yarn.lock
请参阅 package-lock.json 和 npm shrinkwrap
。
一个 包
是
- a) 包含由
package.json
文件描述的程序的文件夹 - b) 包含 (a) 的 gzip 压缩的 tar 包
- c) 解析为 (b) 的 URL
- d) 发布在注册表 (请参阅
registry
) 上的<name>@<version>
,具有 (c) - e) 指向 (d) 的
<name>@<tag>
(请参阅npm dist-tag
) - f) 具有满足 (e) 的“latest”标签的
<name>
- g) 解析为 (a) 的
<git remote url>
即使您从未发布过您的包,只要您只想编写一个 Node 程序 (a),或者也许您还希望能够在将程序打包到 tar 包 (b) 后轻松地在其他地方安装它,您仍然可以从使用 npm 中获得很多好处。
-
npm install
(在包目录中,无参数)将依赖项安装到本地
node_modules
文件夹。在全局模式 (即,在命令后面添加
-g
或--global
) 下,它会将当前包上下文 (即,当前工作目录) 作为全局包进行安装。默认情况下,
npm install
会安装package.json
中列出的所有模块作为依赖项。使用
--production
标志 (或当NODE_ENV
环境变量设置为production
时),npm 不会安装devDependencies
中列出的模块。要在NODE_ENV
环境变量设置为production
时安装dependencies
和devDependencies
中列出的所有模块,可以使用--production=false
。注意:在将依赖项添加到项目时,
--production
标志没有任何特殊含义。 -
npm install <folder>
:如果
<folder>
位于项目根目录内,则会安装其依赖项,并可能将其提升到顶层node_modules
,就像对其他类型的依赖项一样。如果<folder>
位于项目根目录之外,npm 不会在<folder>
目录中安装包依赖项,但会创建指向<folder>
的符号链接。注意:如果您想像从注册表安装包一样安装目录的内容,而不是创建链接,则需要使用
--install-links
选项。示例
npm install ../../other-package --install-linksnpm install ./sub-package -
npm install <tarball file>
:安装位于文件系统上的包。注意:如果您只想将开发目录链接到 npm 根目录,可以使用
npm link
更轻松地执行此操作。Tar 包要求
- 文件名必须使用
.tar
、.tar.gz
或.tgz
作为扩展名。 - 包内容应位于 tar 包内的子文件夹中 (通常称为
package/
)。npm 在安装包时会剥离一层目录 (等效于运行tar x --strip-components=1
)。 - 包必须包含具有
name
和version
属性的package.json
文件。
示例
npm install ./package.tgz - 文件名必须使用
-
npm install <tarball url>
:获取 tar 包 URL,然后安装它。为了区分此选项和其他选项,参数必须以“http://”或“https://”开头
示例
npm install https://github.com/indexzero/forever/tarball/v0.5.6 -
npm install [<@scope>/]<name>
:执行一个
<name>@<tag>
安装,其中<tag>
是 "tag" 配置。 (参见config
。 配置的默认值为latest
。)在大多数情况下,这将安装在 npm 注册表上标记为
latest
的模块版本。示例
npm install saxnpm 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.json
或package-lock.json
,它也将被更新。<scope>
是可选的。 该包将从与指定范围关联的注册表下载。 如果没有与给定范围关联的注册表,则假定默认注册表。 参见scope
。注意:如果您在范围名称中不包含 @ 符号,npm 将将其解释为 GitHub 存储库,如下所示。 范围名称后面还必须跟一个斜杠。
示例
npm install saxnpm install githubname/reponamenpm install @myorg/privatepackagenpm install node-tap --save-devnpm install dtrace-provider --save-optionalnpm install readable-stream --save-exactnpm install ansi-regex --save-bundle注意:如果当前工作目录中存在名为
<name>
的文件或文件夹,那么它将尝试安装该文件或文件夹,并且仅在该文件或文件夹无效时才尝试按名称获取包。 -
-
npm install <alias>@npm:<name>
:在自定义别名下安装包。 允许同一名称包的多个版本并行存在,为包提供更方便的导入名称(否则名称很长),以及使用 git fork 替换或 fork 的 npm 包作为替换。 别名仅在您的项目中有效,不会在传递依赖项中重命名包。 别名应遵循
validate-npm-package-name
中规定的命名约定。示例
npm install my-react@npm:reactnpm install jquery2@npm:jquery@2npm install jquery3@npm:jquery@3npm install npa@npm:npm-package-arg -
npm install [<@scope>/]<name>@<tag>
:安装由指定标签引用的包版本。 如果注册表数据中不存在该包的标签,则安装会失败。
示例
npm install sax@latestnpm install @myorg/mypackage@latest -
npm install [<@scope>/]<name>@<version>
:安装指定版本的包。 如果版本尚未发布到注册表,则安装会失败。
示例
-
npm install [<@scope>/]<name>@<version range>
:安装与指定版本范围匹配的包版本。 这将遵循
package.json
中描述的相同依赖项解析规则。请注意,大多数版本范围必须放在引号中,以便您的 shell 将其视为单个参数。
示例
npm install sax@">=0.1.0 <0.2.0"npm install @myorg/privatepackage@"16 - 17" -
npm install <git remote url>
:从托管的 git 提供商安装包,使用
git
克隆它。 对于完整的 git 远程 URL,只会尝试该 URL。<protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish> | #semver:<semver>]<protocol>
是git
、git+ssh
、git+http
、git+https
或git+file
中的一种。如果提供
#<commit-ish>
,它将用于准确克隆该提交。 如果提交-ish 的格式为#semver:<semver>
,<semver>
可以是任何有效的 semver 范围或确切版本,npm 将在远程存储库中查找与该范围匹配的任何标签或引用,就像它处理注册表依赖项一样。 如果未指定#<commit-ish>
或#semver:<semver>
,则使用存储库的默认分支。如果正在安装的包使用子模块,那么这些子模块也将被克隆。
如果正在安装的包包含
prepare
脚本,则在打包和安装包之前,将安装其dependencies
和devDependencies
,并运行 prepare 脚本。以下 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://github.com/npm/cli.git#v1.0.27 -
npm install <githubname>/<githubrepo>[#<commit-ish>]
: -
npm install github:<githubname>/<githubrepo>[#<commit-ish>]
:通过尝试使用
git
克隆它,在https://github.com/githubname/githubrepo
上安装包。如果提供
#<commit-ish>
,它将用于准确克隆该提交。 如果提交-ish 的格式为#semver:<semver>
,<semver>
可以是任何有效的 semver 范围或确切版本,npm 将在远程存储库中查找与该范围匹配的任何标签或引用,就像它处理注册表依赖项一样。 如果未指定#<commit-ish>
或#semver:<semver>
,则使用默认分支。与常规 git 依赖项一样,如果包在安装完成之前具有
prepare
脚本,则将安装dependencies
和devDependencies
。示例
npm install mygithubuser/myprojectnpm install github:mygithubuser/myproject -
npm install gist:[<githubname>/]<gistID>[#<commit-ish>|#semver:<semver>]
:通过尝试使用
git
克隆它,在https://gist.github.com/gistID
上安装包。 与 gist 关联的 GitHub 用户名是可选的,不会保存在package.json
中。与常规 git 依赖项一样,如果包在安装完成之前具有
prepare
脚本,则将安装dependencies
和devDependencies
。示例
npm install gist:101a11beef -
npm install bitbucket:<bitbucketname>/<bitbucketrepo>[#<commit-ish>]
:通过尝试使用
git
克隆它,在https://bitbucket.org/bitbucketname/bitbucketrepo
上安装包。如果提供
#<commit-ish>
,它将用于准确克隆该提交。 如果提交-ish 的格式为#semver:<semver>
,<semver>
可以是任何有效的 semver 范围或确切版本,npm 将在远程存储库中查找与该范围匹配的任何标签或引用,就像它处理注册表依赖项一样。 如果未指定#<commit-ish>
或#semver:<semver>
,则使用master
。与常规 git 依赖项一样,如果包在安装完成之前具有
prepare
脚本,则将安装dependencies
和devDependencies
。示例
npm install bitbucket:mybitbucketuser/myproject -
npm install gitlab:<gitlabname>/<gitlabrepo>[#<commit-ish>]
:通过尝试使用
git
克隆它,在https://gitlab.com/gitlabname/gitlabrepo
上安装包。如果提供
#<commit-ish>
,它将用于准确克隆该提交。 如果提交-ish 的格式为#semver:<semver>
,<semver>
可以是任何有效的 semver 范围或确切版本,npm 将在远程存储库中查找与该范围匹配的任何标签或引用,就像它处理注册表依赖项一样。 如果未指定#<commit-ish>
或#semver:<semver>
,则使用master
。与常规 git 依赖项一样,如果包在安装完成之前具有
prepare
脚本,则将安装dependencies
和devDependencies
。示例
npm install gitlab:mygitlabuser/myprojectnpm 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
并下载依赖项。
-f
或 --force
参数将强制 npm 获取远程资源,即使磁盘上存在本地副本。
npm install sax --force
配置
参见 config
帮助文档。 许多配置参数对安装有一些影响,因为这基本上是 npm 所做的工作。
这些是与安装相关的最常见选项之一。
保存
- 默认值:
true
,除非使用npm update
,在这种情况下,默认值为false
- 类型:布尔值
将安装的包保存到 package.json
文件中作为依赖项。
当与 npm rm
命令一起使用时,从 package.json
中删除依赖项。
如果设置为 false
,还将阻止写入 package-lock.json
。
保存-精确
- 默认值:false
- 类型:布尔值
保存到 package.json 的依赖项将使用确切的版本进行配置,而不是使用 npm 的默认 semver 范围运算符。
全局
- 默认值:false
- 类型:布尔值
在 "全局" 模式下运行,以便包安装到 prefix
文件夹中,而不是当前工作目录。 参见 folders,了解有关行为差异的更多信息。
- 包安装到
{prefix}/lib/node_modules
文件夹中,而不是当前工作目录。 - bin 文件链接到
{prefix}/bin
- 手册页链接到
{prefix}/share/man
安装策略
- 默认值:"hoisted"
- 类型:"hoisted"、"nested"、"shallow" 或 "linked"
设置在 node_modules 中安装包的策略。 hoisted(默认):在顶层安装未重复的包,并在目录结构中按需重复安装。 nested:(以前为 --legacy-bundling)就地安装,不提升。 shallow:(以前为 --global-style)只在顶层安装直接依赖项。 linked:(实验性)在 node_modules/.store 中安装,就地链接,不提升。
传统捆绑
- 默认值:false
- 类型:布尔值
- 已弃用:此选项已被
--install-strategy=nested
弃用。
不要在 node_modules
中提升包安装,而是以它们被依赖的方式安装包。 这可能会导致非常深的目录结构和重复的包安装,因为没有去重。 设置 --install-strategy=nested
。
全局样式
- 默认值:false
- 类型:布尔值
- 已弃用:此选项已被
--install-strategy=shallow
弃用。
只在顶层 node_modules
中安装直接依赖项,但在更深层的依赖项上提升。 设置 --install-strategy=shallow
。
省略
- 默认值:如果
NODE_ENV
环境变量设置为 'production',则为 'dev',否则为空。 - 类型:"dev"、"optional" 或 "peer"(可以设置多次)
要从磁盘上的安装树中省略的依赖项类型。
请注意,这些依赖项仍然会被解析并添加到 package-lock.json
或 npm-shrinkwrap.json
文件中。 它们只是没有实际安装到磁盘上。
如果一个包类型同时出现在 --include
和 --omit
列表中,那么它将被包含。
如果最终的省略列表包含 'dev'
,那么对于所有生命周期脚本,NODE_ENV
环境变量将被设置为 'production'
。
包含
- 默认
- 类型:"prod"、"dev"、"optional" 或 "peer"(可以设置多次)
允许定义要安装的依赖项类型的选项。
这是 --omit=<type>
的反面。
在 --include
中指定的依赖项类型将不会被省略,无论在命令行中省略/包含的顺序如何。
严格对等依赖项
- 默认值:false
- 类型:布尔值
如果设置为 true
且未设置 --legacy-peer-deps
,那么 *任何* 冲突的 peerDependencies
将被视为安装失败,即使 npm 可以根据非对等依赖关系合理地猜测合适的解决方案。
默认情况下,依赖关系图中深处冲突的 peerDependencies
将使用最近的非对等依赖项规范来解决,即使这样做会导致某些包接收超出其包的 peerDependencies
对象中设置范围的对等依赖项。
当执行这种覆盖时,会打印一条警告,解释冲突和涉及的包。如果设置了 --strict-peer-deps
,那么此警告将被视为失败。
首选去重
- 默认值:false
- 类型:布尔值
如果可能,优先对包进行重复数据删除,而不是选择依赖项的较新版本。
package-lock
- 默认值:true
- 类型:布尔值
如果设置为 false,则在安装时忽略 package-lock.json
文件。如果 save
为 true,这也会阻止 *写入* package-lock.json
。
仅 package-lock
- 默认值:false
- 类型:布尔值
如果设置为 true,则当前操作将仅使用 package-lock.json
,忽略 node_modules
。
对于 update
,这意味着仅更新 package-lock.json
,而不是检查 node_modules
并下载依赖项。
对于 list
,这意味着输出将基于 package-lock.json
描述的树,而不是 node_modules
的内容。
前台脚本
- 默认值:
false
,除非使用npm pack
或npm publish
,在这种情况下默认值为true
- 类型:布尔值
在前景进程中运行已安装包的所有构建脚本(即 preinstall
、install
和 postinstall
)脚本,与主 npm 进程共享标准输入、输出和错误。
请注意,这通常会导致安装运行速度变慢,并且噪音更大,但对于调试可能很有用。
忽略脚本
- 默认值:false
- 类型:布尔值
如果为 true,npm 不会运行 package.json 文件中指定的脚本。
请注意,明确用于运行特定脚本的命令(例如 npm start
、npm stop
、npm restart
、npm test
和 npm run-script
)如果设置了 ignore-scripts
,仍将运行其预期脚本,但它们 *不会* 运行任何预脚本或后脚本。
审计
- 默认值:true
- 类型:布尔值
当 "true" 时,将审计报告与当前 npm 命令一起提交到默认注册表以及为作用域配置的所有注册表。有关提交内容的详细信息,请参阅 npm audit
的文档。
bin 链接
- 默认值:true
- 类型:布尔值
告诉 npm 为包可执行文件创建符号链接(或在 Windows 上创建 .cmd
垫片)。
设置为 false 以防止它执行此操作。这可用于解决某些文件系统不支持符号链接的问题,即使在表面上是 Unix 系统上也是如此。
基金
- 默认值:true
- 类型:布尔值
当 "true" 时,将在每个 npm install
结束时显示一条消息,确认正在寻找资金的依赖项数量。有关详细信息,请参阅 npm fund
。
试运行
- 默认值:false
- 类型:布尔值
表示您不希望 npm 进行任何更改,并且它应该只报告它将要执行的操作。这可以传递给任何修改本地安装的命令,例如 install
、update
、dedupe
、uninstall
,以及 pack
和 publish
。
注意:这不会被其他与网络相关的命令(例如 dist-tags
、owner
等)遵守。
CPU
- 默认值:null
- 类型:null 或 String
覆盖要安装的本机模块的 CPU 架构。可接受的值与 package.json 的 cpu
字段相同,该字段来自 process.arch
。
操作系统
- 默认值:null
- 类型:null 或 String
覆盖要安装的本机模块的操作系统。可接受的值与 package.json 的 os
字段相同,该字段来自 process.platform
。
libc
- 默认值:null
- 类型:null 或 String
覆盖要安装的本机模块的 libc。可接受的值与 package.json 的 libc
字段相同
工作区
- 默认
- 类型:String(可以设置多次)
启用在当前项目的配置工作空间的上下文中运行命令,同时通过仅运行此配置选项定义的工作空间来过滤。
对于 workspace
配置,有效值是
- 工作空间名称
- 工作空间目录的路径
- 父工作空间目录的路径(将导致选择该文件夹内的所有工作空间)
当为 npm init
命令设置时,这可以设置为尚未存在的工作空间的文件夹,以创建文件夹并将其设置为项目中的一个全新的工作空间。
此值不会导出到子进程的环境中。
工作区
- 默认值:null
- 类型:null 或 Boolean
设置为 true 以在 **所有** 配置的工作空间的上下文中运行命令。
将此显式设置为 false 将导致像 install
这样的命令完全忽略工作空间。当未显式设置时
- 对
node_modules
树进行操作的命令(install、update 等)将链接工作空间到node_modules
文件夹中。 - 执行其他操作的命令(test、exec、publish 等)将对根项目进行操作, *除非* 在workspace
配置中指定了一个或多个工作空间。
此值不会导出到子进程的环境中。
包含工作区根目录
- 默认值:false
- 类型:布尔值
当为命令启用工作空间时,包括工作空间根目录。
当为 false 时,通过 workspace
配置指定单个工作空间,或通过 workspaces
标志指定所有工作空间,将导致 npm 仅对指定的工作空间进行操作,而不是对根项目进行操作。
此值不会导出到子进程的环境中。
安装链接
- 默认值:false
- 类型:布尔值
当设置时,file: 协议依赖项将被打包并安装为常规依赖项,而不是创建符号链接。此选项对工作空间没有影响。
算法
给定一个 package{dep}
结构:A{B,C}, B{C}, C{D}
,npm install 算法会生成
A+-- B+-- C+-- D
也就是说,从 B 到 C 的依赖关系由 A 已经在更高层级安装 C 的事实所满足。D 仍然安装在顶层,因为没有任何东西与它冲突。
对于 A{B,C}, B{C,D@1}, C{D@2}
,此算法会生成
A+-- B+-- C`-- D@2+-- D@1
因为 B 的 D@1 将被安装在顶层,所以 C 现在必须私下为自身安装 D@2。此算法是确定性的,但如果以不同的顺序请求两个依赖项进行安装,则可能会生成不同的树。
有关 npm 创建的特定文件夹结构的更详细说明,请参阅 文件夹。
另请参阅
- npm 文件夹
- npm update
- npm audit
- npm fund
- npm link
- npm rebuild
- npm 脚本
- npm config
- npmrc
- npm 注册表
- npm dist-tag
- npm uninstall
- npm shrinkwrap
- package.json
- 工作区