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

Update package to a major release with NPM

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 完成它的工作?

要采用的 common/best 做法是什么?

谢谢

Or maybe I have just to remove the ^ character to let npm update do its job?

What is the common/best practice to adopt?

最 common/best 的做法是永远不允许自动更新具有潜在破坏性更改的版本。工作流程无处不在,来自;手动测试然后更新 packages.json,以全自动检测、测试、更新和提交 packages.json。

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

我建议您学习 Diamond Dependency Problem 并牢记于心。您应该始终仔细测试重大更改,切勿试图将它们强加给您的客户。

正如@ShaharShokrani 所指出的,这个answer gives a good workflow for manually updating your package. And to remain in compliance with SemVer 2.0.0 #8,别忘了增加你自己的主要版本号。

So, if I want to upgrade, what am I supposed to do?

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

看到这个很棒answer

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

你会这样做:

npm install the-package@5

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

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

npm rm package
npm i package