【问题标题】:Update package to a major release with NPM使用 NPM 将包更新到主要版本
【发布时间】:2018-07-31 19:05:19
【问题描述】:

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

假设我正在安装 stylelint: npm install --save stylelint 默认情况下将字符串 "stylelint": "^8.4.1" 放入我的 package.json 中这意味着如果我想用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 完成它的工作?

要采用的常见/最佳做法是什么?

谢谢

【问题讨论】:

  • 正如您所分享的npm update 只负责次要和补丁升级。但是,为了有意更新主要版本,您可以使用npm install 命令而无需卸载或手动删除。对于你的例如npm install stylelint@9.0.0npm install stylelint@latest
  • 这能回答你的问题吗? npm check and update package if needed
  • 只需运行 npm install 并标记新版本,请参阅下面的答案。

标签: node.js npm updates semantic-versioning


【解决方案1】:

或者也许我只是删除 ^ 字符让 npm update 完成它的工作?

要采用的常见/最佳做法是什么?

最常见/最佳做法是绝不允许自动更新具有潜在重大更改的版本。工作流程遍布地图,来自;手动测试然后更新packages.json,实现packages.json的全自动检测、测试、更新和提交。

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

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

正如@ShaharShokrani 所指出的,answer 提供了一个很好的手动更新包的工作流程。并且为了遵守SemVer 2.0.0 #8,不要忘记修改您自己的主要版本号。

【讨论】:

  • 好的,所以没有定义任何特定的工作流,除了做这类事情的大量注意力! :-D 感谢您的回答和建议!
  • 市面上有很多 DevOps 产品,它们提供了自动化此场景所需的所有机制。这些工具中的大多数预设场景都是围绕最简单的工作流程设计的,这些工作流程在依赖方面并不涉及太多复杂性,但大多数都具有创建自己的工作流程所需的所有挂钩。一般来说,你会写一些脚本,这就是他们锁定你的方式。
  • 不知道为什么这个答案被接受,因为它实际上并没有回答原始用户的问题。
  • @Geuis,问题是“采用的常见/最佳实践是什么?”,据我所知,我做出了相应的回答。你有更好的答案吗?
  • @Geuis,我已经更新了答案。也许我应该简单地投票关闭这个帖子,因为它问的问题不止一个?如果不是semantic-versioning 标签,我永远不会看到这个帖子。我一直更关注 SemVer 标准,而不是各种打包工具如何实现它。如果@ShaharShokrani 早些时候回答了这个问题,我会继续前进。那时,我对 NPM 的兴趣真的为零,我不想让 SemVer 线程无人回答。
【解决方案2】:

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

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

看到这个很棒的answer

【讨论】:

  • npm-check-updates 进行了重大更新,根据semver 的说法,可能会有重大变化。小心使用。
【解决方案3】:

假设您在 3.x 版本中安装了“the-package”并希望升级到 5.x

你会这样做:

npm install the-package@5

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

【讨论】:

    【解决方案4】:

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

    npm rm package
    npm i package
    

    【讨论】:

      猜你喜欢
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      • 2019-04-01
      • 2019-03-17
      相关资源
      最近更新 更多