如果我npm install "grunt-contrib-uglify" --save-dev
,我的开发依赖项将添加以下行:
grunt-contrib-uglify: "^0.4.0",
我认为构建脚本最好的做法是引用所需工具的确切版本,并在需要时手动升级工具,以避免在构建过程中的不适当时间进行回归。
所以我很惊讶添加的行不是
grunt-contrib-uglify: "~0.4.0",
我在这里遗漏了什么吗?在使用--save-dev
选项后,我是否应始终将^更改为〜?
答案 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”兼容的版本