使用 NPM 将包更新到主要版本

can*_*eta 26 updates node.js npm semantic-versioning

Node.js项目中,我不清楚将包升级到主要版本的正确工作流程是什么。

假设我正在安装stylelintnpm install --save stylelint默认情况下,在我的package.json 中放入字符串"stylelint": "^8.4.1"这意味着如果我想用 更新它npm update,我将只获得次要版本和补丁版本 (8.4. 2 可以,8.5.0 可以,9.0.0 不行)。

如果我检查npm outdated并发现我可以更新到 9.0.0,则npm update由于上述限制而无法正常工作。

那么,如果我想升级,我应该怎么做?

我是否需要手动将package.json修改为 stylelint 版本 ^9.0.0,删除node_modules目录并重新运行npm install

或者我可能只需要删除^角色才能让它npm update完成它的工作?

要采用的常见/最佳实践是什么?

谢谢

Mac*_*zyk 52

假设您安装了 3.x 版本的“the-package”并想要升级到 5.x

你会这样做:

npm install the-package@5
Run Code Online (Sandbox Code Playgroud)

它也会更新 package.json 和 package-lock.json 。

您还可以在一个命令中更新多个包,例如npm install package1@5 package2@16

要检查哪些软件包需要更新,请运行npm outdated


Sha*_*ani 13

那么,如果我想升级,我应该怎么做?

为了更新主要版本,您可以使用npm-check-updates.

看到这个很棒的答案


jwd*_*hue 9

或者也许我只需删除 ^ 字符即可让 npm update 完成其工作?

采用的常见/最佳实践是什么?

最常见/最佳实践是永远不允许自动更新可能具有重大更改的版本。工作流程遍布整个地图,从:手动测试然后更新packages.json,以全自动检测、测试、更新和提交packages.json。

由于缺乏并行版本控制支持,许多 Java/JavaScript 环境对传递依赖项更改特别敏感。如果您的包对其自身的依赖项之一带来了重大更改,那么您的包也对系统引入了重大更改。如果您的 1.yz 导致其依赖项之一从 XYZ 更新为 X+1.YZ,则会引入重大更改,因此不是稳定版本 1.yz 依赖于与您的包名称相同的包的其他包可能是每当该软件包的开发人员发布重大更改时就会损坏。永远不要让世界陷入那种状态!

我建议您研究钻石依赖问题并牢记在心。您应该始终仔细测试重大更改,切勿试图将其强加给您的客户。

正如@ShaharShokrani 所指出的,这个答案为手动更新包提供了一个很好的工作流程。为了保持符合SemVer 2.0.0 #8,不要忘记更改您自己的主要版本号。

  • 不知道为什么这个答案被接受,因为它实际上并没有回答原始用户的问题。 (37认同)

Nic*_*ssi 8

您还可以删除并安装该软件包。

npm rm package
npm i package
Run Code Online (Sandbox Code Playgroud)