命令 "npm update" 与程序包 "npm-check-updates"

Command "npm update" vs package "npm-check-updates"

命令npm update and the package npm-check-updates有什么区别?使用后者是否完全安全?

执行npm update后好像没有更新所有的包,所以看起来不完整。许多其他popular SO answers指的是先使用先验命令然后再使用后者,但我仍然不明白后者做了什么而先验命令没有。

npm-check-updates 只会修改您的 package.json 文件。一旦您 运行 该命令,您将需要 运行 一个单独的 npm install 来获取这些更改。另一方面,npm update 将执行所有这些操作,并且不会让您有机会预先检查正在更新的内容。

曾经有一个烦恼是 npm update 没有更新 package.json 文件,但从 5.0.0 开始不再是这种情况。很久以前,它还查看了包依赖性,这给很多人带来了无穷无尽的问题。

两者之间的主要区别在于您可以 运行 ncunpm-check-updates 的别名)并且默认情况下,它不会更新您的包 - 只是告诉您需要更新哪些包。

例如,下面是我的一个遗留项目的输出。在这里,您可以看到一些 grunt 包已过期,主要是因为我不再从事该项目,更喜欢在 npm 中编写构建脚本,并且没有时间更新旧项目。

λ ncu
Checking D:\Github\XQSF_Master\web\package.json
[====================] 10/10 100%

 grunt                 ^1.0.3  →  ^1.0.4
 grunt-contrib-clean   ^1.0.0  →  ^2.0.0
 grunt-contrib-cssmin  ^2.2.1  →  ^3.0.0
 grunt-contrib-uglify  ^3.2.1  →  ^4.0.1
 grunt-sass            ~2.0.0  →  ~3.0.2

Run ncu -u to upgrade package.json

没有对我的项目进行任何更改 - 它只是告诉我需要更新的内容。这就是为什么我更喜欢npm-check-updates。默认情况下,它不会进行任何更改。

如果您DO 想要由 ncu 进行更改,只需 运行 ncu -u。这将更新您的 package.json,但您仍然需要 运行 npm install 才能将 node_modules 文件夹更新为您的新包。

好吧,经过一些调查和大量错误信息后,我想我终于明白了。

npm-check-updates 将使用每个包的最新更新修改您的 package.json 文件,并且不遵守任何 npm semantic versioning,这意味着您的项目可能会中断。一旦您 运行 npm-check-updates,您将需要 运行 一个单独的 npm install 来获取最新版本的这些更改。

另一方面,npm update 根据文件 package.json.

中设置的 semantic versioning 将软件包更新到最新版本

例如,依赖项中的主要版本(3 位数版本中第一个数字的增加)进行的更改可能会破坏向后兼容性。如果您使用插入符号 ^package.json 中设置该依赖项,命令 npm install 将不会更新主要版本,而 npm-check-updates 会。检查 npm 的这 5 分钟 video 因为它非常清楚。

晚会有点晚了,但我觉得之前接受的答案已经过时并且略有欠缺。

npm 提供什么

npm update - updates the dependencies both in package.json and package-lock.json in accordance to the semantic version rules 定义在 package.json.

npm update 的主要特点:

  • 它将永远不会更新到一个中断版本。
  • (npm@7 及以上)您可以选择只更新 package.json 文件 npm update --package-lock false。但是,此标志将完全忽略 package-lock.json,因此自动 p运行ing 无关模块也将被禁用。
  • (npm@7 及更高版本)您可以看到更改 npm update 将使用标志 --dry-run 执行,而不会实际更新。

npm outdated - 显示所有具有更新版本的包,这包括重大更改。 它打印一个 table,其中包括包、当前版本、想要的版本 - 根据 package.json 中的 semver 规则 - 最新版本和包的位置。

npm-check-updates 提供什么

运行 ncu 没有任何标志将打印所有过时包的列表以及它将更新到的版本,但不会应用任何更改。

ncu --update - 仅将更改应用于 package.json 文件。它会将 package.json 中所有依赖项的版本更改为最新版本(即使是破坏版本!),但不会修改 package-lock.json 文件。为此,您需要 运行 npm install.

ncu --target [patch, minor, latest, newest, greatest] - 选择要list/update的版本类型。

npm 与 ncu

Feature npm ncu
Show Outdated Packages npm outdated - shows wanted & latest versions ncu - shows latest by default, can be customised
Update Packages npm update ncu -u
Breaking Versions Never updates to a breaking version, but shows them in npm outdated Updates to and shows breaking version by default, can be customised
package.json SemVer Rules npm outdated shows the "wanted" version according to SemVer rules, updates to "wanted" version Disregards SemVer rules, can be customised to update to different types of versions
Files Modified Modifies package.json and package-lock.json and installs the updated modules Modifies package.json, doesn't change package-lock.json and doesn't automatically install
Customisation Can ignore package-lock.json (npm@7) and choose which packages to update Can choose what kind of version to update to (minor, patch, latest, greatest, newest) and which packages to update