为什么--save-dev选项会将依赖项添加为"版本号或更高版本"而不是"这个确切的版本号"

时间:2014-04-24 12:39:00

标签: node.js npm

如果我npm install "grunt-contrib-uglify" --save-dev,我的开发依赖项将添加以下行:

grunt-contrib-uglify: "^0.4.0",

我认为构建脚本最好的做法是引用所需工具的确切版本,并在需要时手动升级工具,以避免在构建过程中的不适当时间进行回归。

所以我很惊讶添加的行不是

grunt-contrib-uglify: "~0.4.0",

我在这里遗漏了什么吗?在使用--save-dev选项后,我是否应始终将^更改为〜?

1 个答案:

答案 0 :(得分:2)

〜并不意味着确切的版本,〜和^都是semver的一部分,并指示不同级别的非破坏性更改,即它会降低错误修复和重构但不会破坏更改。

你有多信任这取决于你真的。您是否相信软件包所有者在修复错误时不会引入重大更改?你相信你的测试可以解决任何问题吗?如果没有,那么你会希望在版本之前没有任何符号来获得确切的版本。您还可以shrinkwrap您的依赖项。

编辑:有关package.json中〜,^和其他符号含义的更多信息,请参阅https://github.com/isaacs/node-semver。对于这个具体案例:

  

~1.2:=> = 1.2.0-0< 1.3.0-0“任何以1.2”开头的版本

     

^ 1.2:=> = 1.2.0-0< 2.0.0-0“任何与1.2”兼容的版本