命令“npm update”与包“npm-check-updates”

Joã*_*ira 11 npm-update

该命令和npm-check-updatesnpm update包有什么区别?使用后者是否完全安全?

执行后似乎npm update并不是所有的包都被更新,因此它看起来不完整。许多其他流行的 SO 答案都提到首先使用先前的命令,然后使用后者,但我仍然不明白后者做了什么而先验命令没有。

Eld*_* B. 14

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

npm 提供什么

npm update-根据中定义的语义版本规则更新package.json和 package-lock.json 中的依赖项。package.json

主要特点npm update

  • 永远不会更新到破坏版本。
  • (npm@7 及以上)您可以选择仅package.json更新npm update --package-lock false. 然而,该标志将完全忽略package-lock.json,因此无关模块的自动修剪也将被禁用。
  • (npm@7 及以上)您可以看到更改npm update将使用 flag 执行--dry-run,而无需实际更新。

npm outdated- 显示具有可用更新版本的所有软件包,这包括重大更改。它打印一个表格,其中包括包、当前版本、所需版本(根据 中的 semver 规则)package.json、最新版本和包的位置。

npm 过时的例子

npm-check-updates 提供什么

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

ncu 输出示例

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

ncu --target [patch, minor, latest, newest, greatest]- 选择要列出/更新的版本类型。

npm 与 ncu

特征 新项目管理 国立大学
显示过时的软件包 npm outdated- 显示想要的和最新的版本 ncu- 默认显示最新,可定制
更新包 npm update ncu -u
突破版本 从不更新到破坏版本,但将其显示在npm outdated 默认更新并显示破坏版本,可以定制
package.json语义版本规则 npm outdated根据 SemVer 规则显示“想要”版本,更新为“想要”版本 忽略 SemVer 规则(除非明确指定),可以自定义更新到不同类型的版本
文件修改 修改package.jsonpackage-lock.json安装更新的模块 修改package.json、不更改package-lock.json且不自动安装
定制化 可以忽略package-lock.json(npm@7) 并选择要更新的包 可以选择要更新到哪种版本(次要版本、补丁版本、最新版本、最大版本、最新版本)以及要更新的软件包


Dan*_*son 5

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

\n\n

以前有一个npm update不更新的烦恼package.json文件,但从 5.0.0 开始,情况不再如此。早在那时,它还研究了包依赖关系,这给很多人带来了无穷无尽的问题。

\n\n

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

\n\n

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

\n\n
\xce\xbb ncu\nChecking D:\\Github\\XQSF_Master\\web\\package.json\n[====================] 10/10 100%\n\n grunt                 ^1.0.3  \xe2\x86\x92  ^1.0.4\n grunt-contrib-clean   ^1.0.0  \xe2\x86\x92  ^2.0.0\n grunt-contrib-cssmin  ^2.2.1  \xe2\x86\x92  ^3.0.0\n grunt-contrib-uglify  ^3.2.1  \xe2\x86\x92  ^4.0.1\n grunt-sass            ~2.0.0  \xe2\x86\x92  ~3.0.2\n\nRun ncu -u to upgrade package.json\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

如果您确实希望 ncu 进行更改,只需运行ncu -u。这将更新您的package.json,但您仍然需要npm install运行node_modules文件夹才能更新到您的新包。

\n