npm update
该命令和包npm-check-updates有什么区别?使用后者是否完全安全?
执行后似乎npm update
并非所有软件包都已更新,因此似乎不完整。许多其他流行的 SO 答案是指先使用先验命令,然后再使用后者,但我仍然不明白后者做了什么,而先验没有。
npm update
该命令和包npm-check-updates有什么区别?使用后者是否完全安全?
执行后似乎npm update
并非所有软件包都已更新,因此似乎不完整。许多其他流行的 SO 答案是指先使用先验命令,然后再使用后者,但我仍然不明白后者做了什么,而先验没有。
npm-check-updates
只会修改你的package.json
文件。运行该命令后,您将需要单独运行npm install
以获取这些更改。另一方面,npm update
它将完成所有这些,而不是让您有机会事先检查正在更新的内容。
曾经有一个npm update
不更新package.json
文件的烦恼,但从 5.0.0 开始不再是这种情况。回到过去,它还研究了包依赖关系,这给很多人带来了无穷无尽的问题。
两者之间的主要区别在于您可以运行ncu
(的别名npm-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
. 默认情况下,它不会进行任何更改。
如果您确实希望ncu进行更改,只需运行ncu -u
. 这将更新您的package.json
.,但您仍需要运行npm install
该node_modules
文件夹以将其更新为您的新软件包。
聚会有点晚了,但我觉得以前接受的答案已经过时并且略有不足。
npm update
-根据定义的语义版本规则更新 package.json 和 package- lock.json中的依赖关系。package.json
主要特点npm update
:
package.json
带有npm update --package-lock false
. 但是,此标志将完全忽略package-lock.json
,因此也将禁用无关模块的自动修剪。npm update
将使用 flag 执行--dry-run
,而无需实际更新。npm outdated
- 显示所有具有较新版本的软件包,包括重大更改。它打印一个表格,其中包括包、当前版本、想要的版本 - 根据 semver 规则package.json
- 最新版本和包的位置。
在没有任何标志的情况下运行ncu
将打印所有过时软件包的列表以及它将更新到的版本,但不会应用任何更改。
ncu --update
- 仅对文件应用更改package.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 SemVer 规则 |
npm outdated 根据 SemVer 规则显示“通缉”版本,更新为“通缉”版本 |
无视 SemVer 规则,可自定义更新到不同类型的版本 |
文件修改 | 修改package.json 并package-lock.json 安装更新的模块 |
修改package.json ,不改变package-lock.json ,不自动安装 |
定制 | 可以忽略package-lock.json (npm@7) 并选择要更新的包 |
可以选择要更新到哪种版本(次要、补丁、最新、最大、最新)以及要更新的软件包 |
好吧,经过一番调查和大量错误信息之后,我想我终于明白了。
npm-check-updates
将使用每个包的最新更新修改您的package.json
文件,并且不尊重任何npm 语义版本控制,这意味着您的项目可能会中断。运行npm-check-updates
后,您需要单独运行npm install
以获取对最新版本的这些更改。
另一方面,根据文件中设置的语义版本控制npm update
将包更新到其最新版本。package.json
例如,依赖项中的主要版本(增加了 3 位数版本中的第一个数字)进行的更改可能会破坏向后兼容性。package.json
如果您使用插入符号设置该依赖项^
,则该命令npm install
将不会更新主要版本,而npm-check-updates
会。查看这个 5 分钟的 npm视频,因为它非常清晰。