合理设置npm依赖包的版本
通常情况下,一个npm包,会依赖于其他的一些包,这种依赖关系会在package.json文件中得以体现。比如:grunt包,它的依赖关系是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
"dependencies": { "async": "~0.1.22", "coffee-script": "~1.3.3", "colors": "~0.6.2", "dateformat": "1.0.2-1.2.3", "eventemitter2": "~0.4.13", "findup-sync": "~0.1.2", "glob": "~3.1.21", "hooker": "~0.2.3", "iconv-lite": "~0.2.11", "minimatch": "~0.2.12", "nopt": "~1.0.10", "rimraf": "~2.2.8", "lodash": "~0.9.2", "underscore.string": "~2.2.1", "which": "~1.0.5", "js-yaml": "~2.0.5", "exit": "~0.1.1", "getobject": "~0.1.0", "grunt-legacy-util": "~0.2.0", "grunt-legacy-log": "~0.1.0" } |
大部分的开发人员,不太会仔细地填写其中的版本号。事实上,如果没有做好版本控制,一旦依赖包的作者做了升级又没有做到向下兼容,那么我们的代码很可能就会运行失败了。因此,对于npm依赖的版本控制有足够的了解是非常有必要的。以下格式基本涵盖了所有常见的npm版本写法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
version 完全匹配 >version 大于这个版本 >=version大于或等于这个版本 <version <=version ~version 非常接近这个版本 ^version 与当前版本兼容 1.2.x X代表任意数字,因此1.2.1, 1.2.3等都可以 http://... Unix系统下使用的tarball的URL。 * 任何版本都可以 ""任何版本都可以 version1 - version2 等价于 >=version1 <=version2. range1 || range2 满足任意一个即可 git... Git地址 user/repo |
通过npm info命令,可以清楚的列出一个包,可供安装的版本以及其他相关信息。
其实在使用npm install 安装的时候,是可以指定一个package的版本范围的,比如:
1 |
npm install cluster@">=0.7.7 <0.8.0" |