# npm update
更新包
# 概要
npm update [<pkg>...]
aliases: up, upgrade, udpate
注意
这个命令不支持工作空间。
# 描述
此命令会将列出的所有包更新为最新版本(由 tag
配置指定),尊重包及其依赖项的 semver 约束(如果它们也需要相同的包)。
它还将安装缺少的软件包。
如果 -g
指定了标志,此命令将更新全局安装的包。
如果未指定包名称,则将更新指定位置(全局或本地)中的所有包。
请注意,默认情况下 npm update
不会更新项目 package.json
中直接依赖项的 semver 值,如果你也想更新 package.json
中的值,你可以运行: npm update --save
(或将 save=true
选项添加到配置文件中以使其成为默认行为)。
# 例子
对于下面的示例,假设当前包是 app
并且它依赖于依赖项 dep1
( dep2
, .. 等)。已发布的版本 dep1
有:
{
"dist-tags": { "latest": "1.2.2" },
"versions": [
"1.2.2",
"1.2.1",
"1.2.0",
"1.1.2",
"1.1.1",
"1.0.0",
"0.4.1",
"0.4.0",
"0.2.0"
]
}
# 插入符号依赖项
如果 app
的 package.json
包含:
"dependencies": {
"dep1": "^1.1.1"
}
然后 npm update
就会安装 dep1@1.2.2
,因为 1.2.2
是 latest
并且 1.2.2
满足 ^1.1.1
。
# 波浪号依赖项
但是,如果 app
的 package.json
包含:
"dependencies": {
"dep1": "~1.1.1"
}
在这种情况下,运行 npm update
将安装 dep1@1.1.2
. 即使 latest
标记指向 1.2.2
,此版本也不满足 ~1.1.1
,相当于 >=1.1.1 <1.2.0
。所以 ~1.1.1
使用满足的最高排序版本,即 1.1.2
.
# 低于 1.0.0 的插入符号依赖项
假设 app
对下面的版本有插入符号依赖 1.0.0
,例如:
"dependencies": {
"dep1": "^0.2.0"
}
npm update
将安装 dep1@0.2.0
,因为没有其他版本满足 ^0.2.0
. 如果依赖于 ^0.4.0
:
"dependencies": {
"dep1": "^0.4.0"
}
然后 npm update
会安装 dep1@0.4.1
,因为那是满足 ^0.4.0
( >= 0.4.0 <0.5.0
) 的最高排序版本。
# 子依赖
假设你的应用现在也依赖于 dep2
:
{
"name": "my-app",
"dependencies": {
"dep1": "^1.0.0",
"dep2": "1.0.0"
}
}
并且 dep2
本身取决于 dep1
这个有限的范围:
{
"name": "dep2",
"dependencies": {
"dep1": "~1.1.1"
}
}
然后使用 npm update
将安装 dep1@1.1.2
,因为这是 dep2
允许的最高版本。当单个版本可以满足树中多个依赖项的 semver
要求时,npm 将优先考虑树中的单个版本的 dep1
而不是两个。在这种情况下,如果你确实需要你的包使用较新版本,则需要使用 npm install
。
# 更新全局安装的软件包
npm update -g
将 update
操作应用于每个全局安装的包 outdated
- 也就是说,具有不同于 latest
。
注意
如果软件包已升级到比 更新的版本 latest
,它将被降级。
# 配置
# save
- Default:
true
除非在使用npm update
时默认为false
- Type: Boolean
将已安装的软件包保存为 package.json
文件作为依赖项。
与 npm rm
命令一起使用时,从 package.json
移除依赖关系。
如果设置为 package.json
,也将阻止写入 false
。
# global
- Default: false
- Type: Boolean
以 “global” 模式运行,会将包安装到 prefix
文件夹而不是当前工作目录中。有关行为差异的更多信息,请参阅 folders。
- 软件包被安装到
{prefix}/lib/node_modules
文件夹中,而不是当前工作目录中。 - bin 文件链接到
{prefix}/bin
- 操作说明链接到
{prefix}/share/man
# global-style
- Default: false
- Type: Boolean
使 npm 以与全局 node_modules
文件夹相同的布局将包安装到本地 node_modules
文件夹。您的直接依赖项将在 node_modules
中显示,它们所依赖的一切将在其 node_modules
文件夹中扁平化。这显然会消除一些重复数据删除。如果与 legacy-bundling
一起使用,legacy-bundling
优先。
# legacy-bundling
- Default: false
- Type: Boolean
使 npm 安装包,以便 1.4 之前的 npm 版本(例如 node 0.8 中包含的版本)可以安装包。这消除了所有自动重复数据删除。如果与 global-style
此选项一起使用 legacy-bundling
将是首选。
# omit
- Default: 'dev' | ''
- Type: "dev", "optional", or "peer" (可以设置多次)
要从磁盘上的安装树中省略的依赖类型。
注意
这些依赖项仍然被解析并添加到 package-lock.json
或 npm-shrinkwrap.json
文件中。
如果包类型同时出现在 --include
和 --omit
列表中,那么它将被包括在内。
如果结果省略列表包括 dev
,则 NODE_ENV 环境变量将设置 production
为所有生命周期的脚本。
# strict-peer-deps
- Default: false
- Type: Boolean
如果设置为 true
,并且没有设置 --legacy-peer-deps
,则任何冲突 peerDependencies
都将被视为安装失败,即使 npm 可以根据非对等依赖关系合理地猜测适当的解决方案。
默认情况下,peerDependencies
将使用最近的非对等依赖规范来解决依赖关系图中的冲突,即使这样做会导致某些包收到超出其包 peerDependencies
对象中设置的范围的对等依赖项。
当执行此类和覆盖时,将打印一个警告,解释冲突和涉及的包。如果设置了 --strict-peer-deps
,则此警告将被视为失败。
# package-lock
- Default: true
- Type: Boolean
如果设置为 false,则在安装时忽略 package-lock.json
文件。如果 save
为 true,将阻止写入 package-lock.json
。
此配置不会影响 npm ci
。
# foreground-scripts
- Default: false
- Type: Boolean
在前台进程中运行已安装包的所有构建脚本(ie, preinstall, install, postinstall) ,将与主 npm 进程共享标准输入、输出和错误。
注意
这通常会使安装运行速度变慢,并且噪音更大,但对调试很有用。
# ignore-scripts
- Default: false
- Type: Boolean
如果为 true, npm 不会运行包中指定的 package.json
文件。
注意
如果设置了 ignore-scripts,那些显式地想要运行特定脚本的命令,比如 npm start
、npm stop
、npm restart
、npm test
和 npm run-script
仍然会运行它们想要运行的脚本,但是它们不会运行任何前脚本或后脚本。
# audit
- Default: true
- Type: Boolean
当为 "true" 时,将检查报告和当前 npm 命令一起提交到默认注册中心和所有配置了作用域的注册中心。具体提交内容请参见 npm audit
文档。
# bin-links
- Default: true
- Type: Boolean
告诉 npm 为包可执行文件创建符号链接(或 Windows 上的 .cmd
连接器命令文件)。
设置为 false 使其不执行此操作。这可以用来解决某些文件系统不支持符号链接的事实,即使在表面上是 Unix 系统上也是如此。
# fund
- Default: true
- Type: Boolean
当为 “true” 时,在每个 npm install
的末尾显示一条消息,确认寻求资助的依赖关系的数量。详见 npm fund
。
# dry-run
- Default: false
- Type: Boolean
表示您不希望 npm 进行任何更改,并且只报告它应该做的事情。这可以传递到任何修改本地安装的命令中,例如:install, update, dedupe, uninstall 以及 pack 和 publish。
注意
其他相关命令不支持此功能,例如 dist-tags, owner 等。
# workspace
- Default:
- Type: String (可以设置多次)
启用在当前项目的已配置工作区的上下文中运行命令,同时通过仅运行此配置选项定义的工作区进行过滤。
workspace
配置的有效值如下:
- 工作区名称
- 工作区目录的路径
- 父工作区目录的路径(将导致选择该文件夹中的所有工作区)
为 npm init
命令设置时,可以将其设置为尚不存在的工作空间的文件夹,以创建文件夹并将其设置为项目中的全新工作空间。
此值不会导出到子进程的环境中。
# workspaces
- Default: null
- Type: null or Boolean
设置为 true 将在所有配置的工作区中运行该命令。
显式地将此设置为 false 将导致如下命令 install
完全忽略工作空间。当没有显式设置时:
- 在
node_modules
树上操作的命令 (install, update, etc.) 时,将把工作区链接到node_modules
文件夹中。做其他事情的命令 (test, exec, publish, etc.) 将在根项目上操作,除非在workspace
配置中指定了一个或多个工作空间。
此值不会导出到子进程的环境中。
# include-workspace-root
- Default: false
- Type: Boolean
当为某个命令启用工作区时,请包含工作区根目录。
当为 false 时,通过 workspace
配置指定单个工作空间,或通过 workspaces
标志指定所有工作空间,将导致 npm 仅在指定的工作空间上运行,而不是在根项目上运行。
此值不会导出到子进程的环境中。
# install-links
- Default: false
- Type: Boolean
当设置文件: 存在于项目根目录之外的协议依赖项将被打包并安装为常规依赖项,而不是创建符号链接。此选项对工作区没有影响。