package.json 中的波浪号(~)和插入符号(^)有什么区别?

新手上路,请多包涵

在我升级到最新的稳定 nodenpm 后,我尝试 npm install moment --save 。它使用插入符号 ^ 前缀将条目保存在 package.json --- 中。以前,它是一个波浪号 ~ 前缀。

  1. 为什么在 npm 中进行这些更改?
  2. 波浪号 ~ 和插入符号 ^ 有什么区别?
  3. 与其他人相比有什么优势?

原文由 Fizer Khan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

请参阅 NPM 文档semver 文档

  • ~version “大约相当于版本” ,将更新您到所有未来的补丁版本,而不增加次要版本。 ~1.2.3 将使用从 1.2.3 到 <1.3.0 的版本。

  • ^version “与版本兼容” ,将更新您到所有未来的次要/补丁版本,而不增加主要版本。 ^2.3.4 将使用从 2.3.4 到 <3.0.0 的版本。

请参阅下面的评论了解例外情况,特别是 对于 pre-one 版本,例如 ^0.2.3

原文由 jgillich 发布,翻译遵循 CC BY-SA 4.0 许可协议

与此问题相关,您可以查看 有关版本的 Composer 文档,但简而言之:

  • 波浪号版本范围 ( ~ ) - ~1.2.3 相当于 >=1.2.3 < 1.3.0
  • 插入符号版本范围 ( ^ ) - ~1.2.3 相当于 >=1.2.3 < 2.0.0

因此,使用 Tilde 您将获得补丁的自动更新,但不会更新次要和主要版本。但是,如果您使用 Caret ,您将获得补丁和次要版本,但您不会获得主要(重大更改)版本。

波浪号版本被认为是“更安全”的方法,但如果您使用可靠的依赖项(维护良好的库),您应该不会对 Caret 版本有任何问题(因为微小的更改不应该是破坏性更改。

您可能应该查看 这篇关于 composer install 和 composer update 之间差异的 stackoverflow 帖子

原文由 milan.latinovic 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题