npm-update

更新包

选择 CLI 版本

概要

npm update [<pkg>...]
aliases: up, upgrade, udpate

描述

此命令将根据您的包及其依赖项的语义版本控制约束(如果它们也需要同一个包),将所有列出的包更新到最新版本(由 tag 配置 指定)。

它也会安装缺少的包。

如果指定了 -g 标志,此命令将更新全局安装的包。

如果没有指定包名,则将更新指定位置(全局或本地)的所有包。

请注意,默认情况下 npm update 不会更新项目 package.json 中直接依赖项的语义版本控制值。如果您还想更新 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"
]
}

脱字符依赖项

如果 apppackage.json 包含

"dependencies": {
"dep1": "^1.1.1"
}

那么 npm update 将安装 [email protected],因为 1.2.2latest,并且 1.2.2 满足 ^1.1.1

波浪号依赖项

但是,如果 apppackage.json 包含

"dependencies": {
"dep1": "~1.1.1"
}

在这种情况下,运行 npm update 将安装 [email protected]。即使 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 将安装 [email protected]

如果依赖项是 ^0.4.0

"dependencies": {
"dep1": "^0.4.0"
}

那么 npm update 将安装 [email protected],因为这是满足 ^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 将安装 [email protected],因为这是 dep2 允许的最高版本。npm 将优先在您的树中使用单个版本的 dep1 而不是两个版本,只要单个版本能够满足您树中多个依赖项的语义版本控制要求。在这种情况下,如果您确实需要您的包使用更新的版本,则需要使用 npm install

更新全局安装的包

npm update -g 将对每个全局安装的包应用 update 操作,这些包是 outdated 的——也就是说,其版本与 wanted 不同。

注意:全局安装的包被视为使用脱字符语义版本控制范围安装。因此,如果您需要更新到 latest,则可能需要运行 npm install -g [<pkg>...]

注意:如果包已升级到比 latest 更新的版本,它将被 *降级*。

配置

save

  • 默认:true,除非使用 npm update,在这种情况下,它默认为 false
  • 类型:布尔值

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

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

如果设置为 false,也将阻止写入 package-lock.json

global

  • 默认值:false
  • 类型:布尔值

在“全局”模式下运行,因此包被安装到 prefix 文件夹中,而不是当前工作目录。有关行为差异的更多信息,请参阅 文件夹

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

install-strategy

  • 默认值: "hoisted"
  • 类型: "hoisted"、"nested"、"shallow" 或 "linked"

设置在 node_modules 中安装包的策略。hoisted(默认):在顶层安装非重复项,并在目录结构中根据需要重复安装。nested:(以前为 --legacy-bundling)就地安装,不提升。shallow(以前为 --global-style)只在顶层安装直接依赖项。linked:(实验性)安装在 node_modules/.store 中,就地链接,不提升。

legacy-bundling

  • 默认值:false
  • 类型:布尔值
  • 已弃用:此选项已弃用,取而代之的是 --install-strategy=nested

不再在 node_modules 中提升包安装,而是以与它们被依赖相同的方式安装包。这可能会导致非常深的目录结构和重复的包安装,因为没有去重。设置 --install-strategy=nested

global-style

  • 默认值:false
  • 类型:布尔值
  • 已弃用:此选项已弃用,取而代之的是 --install-strategy=shallow

仅在顶层 node_modules 中安装直接依赖项,但在更深层的依赖项上提升。设置 --install-strategy=shallow

omit

  • 默认值:如果 NODE_ENV 环境变量设置为 'production',则为 'dev',否则为空。
  • 类型:"dev"、"optional" 或 "peer"(可以设置多次)

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

请注意,这些依赖项仍然会被解析并添加到 package-lock.jsonnpm-shrinkwrap.json 文件中。它们只是没有在磁盘上实际安装。

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

如果结果省略列表包括 'dev',那么 NODE_ENV 环境变量将为所有生命周期脚本设置为 'production'

include

  • 默认值
  • 类型:"prod"、"dev"、"optional" 或 "peer"(可以设置多次)

允许定义要安装的依赖项类型的选项。

这是 --omit=<type> 的反义词。

--include 中指定的依赖项类型不会被省略,无论在命令行中省略/包含的顺序如何。

strict-peer-deps

  • 默认值:false
  • 类型:布尔值

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

默认情况下,依赖项图中较深的冲突 peerDependencies 将使用最近的非对等依赖项规范进行解析,即使这样做会导致某些包接收超出其包的 peerDependencies 对象中设置范围的对等依赖项。

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

package-lock

  • 默认值:true
  • 类型:布尔值

如果设置为 false,则在安装时忽略 package-lock.json 文件。如果 save 为 true,这也将阻止写入 package-lock.json

foreground-scripts

  • 默认值:false,除非在使用 npm packnpm publish 时,默认值为 true
  • 类型:布尔值

在前景进程中运行已安装包的所有构建脚本(即 preinstallinstallpostinstall)脚本,与主 npm 进程共享标准输入、输出和错误。

请注意,这通常会使安装速度变慢,并且噪音更大,但对调试很有用。

ignore-scripts

  • 默认值:false
  • 类型:布尔值

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

请注意,明确用于运行特定脚本的命令,例如 npm startnpm stopnpm restartnpm testnpm run-script 仍将在 ignore-scripts 设置的情况下运行其目标脚本,但它们不会运行任何预脚本或后脚本。

audit

  • 默认值:true
  • 类型:布尔值

当 "true" 时,将审核报告与当前 npm 命令一起提交到默认注册表和为范围配置的所有注册表。有关提交内容的详细信息,请参阅 npm audit 的文档。

  • 默认值:true
  • 类型:布尔值

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

设置为 false 以防止执行此操作。这可用于解决某些文件系统不支持符号链接的问题,即使在表面上是 Unix 系统上也是如此。

fund

  • 默认值:true
  • 类型:布尔值

当 "true" 时,在每次 npm install 结束时显示消息,确认寻找资金的依赖项数量。有关详细信息,请参阅 npm fund

dry-run

  • 默认值:false
  • 类型:布尔值

表示您不希望 npm 进行任何更改,并且它应该仅报告它将要执行的操作。这可以传递给任何修改本地安装的命令,例如 installupdatededupeuninstall,以及 packpublish

注意:这不会被其他网络相关命令(例如 dist-tagsowner 等)认可。

workspace

  • 默认值
  • 类型:字符串(可以设置多次)

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

对于 workspace 配置,有效值为以下之一

  • 工作空间名称
  • 工作空间目录的路径
  • 父工作空间目录的路径(将导致选择该文件夹中的所有工作空间)

当为 npm init 命令设置时,这可以设置为尚未存在的工作空间的文件夹,以创建文件夹并将其设置为项目中的全新工作空间。

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

workspaces

  • 默认值:null
  • 类型:null 或布尔值

设置为 true 以在所有已配置工作空间的上下文中运行命令。

将此值显式设置为 false 将导致像 install 这样的命令完全忽略工作空间。当没有显式设置时

  • node_modules 树进行操作的命令(install、update 等)会将工作空间链接到 node_modules 文件夹中。- 执行其他操作的命令(test、exec、publish 等)将在根项目上运行,除非workspace 配置中指定了一个或多个工作空间。

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

include-workspace-root

  • 默认值:false
  • 类型:布尔值

在为命令启用工作空间时包含工作空间根目录。

当为 false 时,通过 workspace 配置指定单个工作空间,或通过 workspaces 标志指定所有工作空间,将导致 npm 仅对指定的工作空间进行操作,而不对根项目进行操作。

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

  • 默认值:false
  • 类型:布尔值

当设置时,文件:协议依赖项将被打包并安装为常规依赖项,而不是创建符号链接。此选项对工作空间没有影响。

另请参阅