package.json版本控制中“^”的含义是什么?

时间:2014-03-03 02:42:37

标签: npm

我最近使用npm install标记运行了--save-dev(npm 1.4.3),并且它添加到我的package.json中的包条目都以^开头,例如"^2.5.0"。我以前从未见过这个我用过的早期版本的npm,而且我找不到这个符号的任何文档,仅用于我已经熟悉的符号,例如: ~>=等。这是什么意思?

2 个答案:

答案 0 :(得分:35)

引自isaacs/node-semver

  
      
  • ^ 1.2.3:=&gt; = 1.2.3-0 <2.0.0-0“与1.2.3兼容”。使用插入符号运算符时,将支持指定版本(包括预发行版)中的任何内容,但不包括下一个主要版本(或其预发行版)。 1.5.1将满足^ 1.2.3,而1.2.2和2.0.0-beta则不会。
  •   
  • ^ 0.1.3:=&gt; = 0.1.3-0 <0.2.0-0“与0.1.3”相容。 0.x.x版本是特殊的:第一个非零组件表示可能发生重大更改,这意味着插入符操作符匹配从指定版本开始的具有相同的第一个非零组件的任何版本。
  •   
  • ^ 0.0.2:= = 0.0.2“只有版本0.0.2被视为兼容”
  •   

那就是说,我建议改为使用“〜”,因为它有更直观的语义,请参阅npm/npm#4587中的讨论。

答案 1 :(得分:9)

出于兴趣,为什么你认为^ 更多风险比〜? 〜表示该版本或更高版本的任何内容,例如,我所有的东西都只是自动升级到快递的v4并且前几天打破了,因为主要版本被允许不兼容并且允许这样做。如果我使用^ 3.x而不是~3.x它不会给我带来任何问题,那么我的所有代码都会留在最新的3.x版本中而忽略了4.x预发行版。