阅读(734) (10)

npm 更新 update

2021-09-06 16:08:11 更新

更新包

概要

npm update [-g] [<pkg>...]


aliases: up, upgrade

详情

此命令会将列出的所有包更新为最新版本(由tag配置指定),尊重包及其依赖项的 semver 约束(如果它们也需要相同的包)。

它还将安装缺少的软件包。

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

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

实例

对于下面的示例,假设当前包是app并且它依赖于依赖项dep1dep2, .. 等)。已发布的版本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就会安装dep1@1.2.2,因为1.2.2latest并且 1.2.2满足^1.1.1

波浪号依赖项

但是,如果apppackage.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 -gupdate操作应用于每个全局安装的包outdated- 也就是说,具有不同于 latest.

注意:全局安装的包被视为安装时制定了插入符号范围。因此,如果你需要更新到 lastest 你可能需要运行 npm install -g [<pkg>...]

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

配置

global 全局

  • 默认值:false
  • 类型:Boolean

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

  • 软件包安装到{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

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

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

omit 忽略

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

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

请注意,这些依赖的仍然解决,加入 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 命令一起提交到默认注册表和为范围配置的所有注册表。有关npm audit提交内容的详细信息,请参阅文档。

bin-links

  • 默认值:true
  • 类型:Boolean

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

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

fund

  • 默认值:true
  • 类型:Boolean

当“true”在每个结尾处显示消息时,npm install 确认正在寻找资金的依赖项的数量。详情请参阅npm fund

dry-run 试运行

  • 默认值:false
  • 类型:Boolean

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

workspace 工作区

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

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

workspace配置的有效值为:

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

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

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

workspaces 工作区

  • 默认值:false
  • 类型:Boolean

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

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