一尘不染

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

javascript

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

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

阅读 191

收藏
2022-01-10

共3个答案

一尘不染

请参阅NPM 文档semver 文档

  • ~version “大约相当于版本”,将更新您到所有未来的补丁版本,而不会增加次要版本。~1.2.3将使用从 1.2.3 到 <1.3.0 的版本。
  • ^version “与版本兼容”,将更新您到所有未来的次要/补丁版本,而不会增加主要版本。^2.3.4将使用从 2.3.4 到 <3.0.0 的版本。
2022-01-10
一尘不染

只要第一个数字(“主要”)至少为 1:

~锁定主要和次要号码。当您准备仅接受错误修复(第三个数字中的增量),但不希望进行任何其他更改,甚至不希望添加功能的小升级时,可以使用它。

^只锁定主号码。当您愿意接收错误修复(第三个数字的增量)和添加功能但不应破坏现有代码的小升级(第二个数字的增量)时,可以使用它。但是,您不希望更改破坏现有代码(第一个数字中的增量)。

除此之外,^是不支持由旧版本的NPM,并应谨慎使用。

所以,^是一个很好的默认值,但它并不完美。我建议仔细选择和配置对您最有用的 semver 运算符。

(修改以避免说“修复”和“错误修复”与“修复”的使用冲突,这是令人困惑的)

2022-01-10
一尘不染

我还想添加官方 npmjs 文档,其中描述了所有版本特异性方法,包括问题中提到的方法

价值 描述
~version “大约相当于版本” 参见npm semver - Tilde Ranges
^version “与版本兼容” 参见npm semver - Caret Ranges
version 必须完全匹配版本
>version 必须大于版本
>=version 等等
<version
<=version
1.2.x 1.2.0、1.2.1 等,但不是 1.3.0
* 匹配任何版本
latest 获取最新版本

上面的列表并不详尽。其他版本说明符包括 GitHub url 和 GitHub 用户存储库、本地路径和带有特定 npm 标签的包

2022-01-10