在Node.js项目中,我不清楚将软件包升级到主要版本的正确工作流程是什么。
假设我安装了stylelint:默认情况下,npm install --save stylelint
将字符串“stylelint”放入我的package.json中:“^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
完成它的工作?
要采用的常见/最佳实践是什么?
谢谢
4条答案
按热度按时间nwwlzxa71#
假设您安装了版本为3.x的“the-package”,并希望升级到5.x
您可以这样做:
它也将更新package.json和package-lock.json。
您也可以在一个命令中更新多个软件包,如
npm install package1@5 package2@16
要检查哪些软件包需要更新,请运行
npm outdated
ffscu2ro2#
那么,如果我想升级,我应该怎么做?
为了更新主要版本,您可以使用
npm-check-updates
。看看这款出色的answer。
vltsax253#
或者,也许我只需要删除^字符,让npm更新完成它的工作?
要采用的常见/最佳实践是什么?
最常见/最好的做法是永远不允许自动更新具有潜在破坏性更改的版本。手动测试然后更新packages.json,以完全自动化检测、测试、更新和提交packages.json。
许多Java/JavaScript环境由于缺乏并行版本控制支持而对可传递的依赖关系更改特别敏感。如果您的包引入了其自身依赖关系的破坏性更改,那么你的软件包已经对系统进行了重大的改变。2如果你的1.y.z导致它的一个依赖项从X.Y.Z更新到X+1.Y。Z它引入了一个破坏性的变更,因此不是一个稳定的版本1.y.z。其他依赖于与您的包名相同的包的包可能会在该包的开发者发布了一个破坏性的变更时被破坏。永远不要让世界进入那种状态!
我建议你学习Diamond Dependency Problem并牢记在心。你应该总是仔细测试突破性的变化,永远不要试图把它们强加给你的客户。
正如@ShaharShokrani所指出的,这个答案提供了一个很好的手动更新软件包的工作流程。为了保持与SemVer 2.0.0 #8的兼容性,不要忘记更新你自己的主版本号。
mxg2im7a4#
您还可以删除和安装软件包。