前言

package.json 中的 dependencies 和 devDependencies 字段中包含了依赖包的列表,其中还指明了 npm 包的版本适用范围,必须要了解清楚。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"dependencies": {
"hexo": "^3.2.0",
"hexo-baidu-url-submit": "0.0.5",
"hexo-deployer-git": "^0.3.1",
"hexo-generator-archive": "^0.1.4",
"hexo-generator-baidu-sitemap": "^0.1.2",
"hexo-generator-category": "^0.1.3",
"hexo-generator-feed": "^1.2.2",
"hexo-generator-index": "^0.2.0",
"hexo-generator-searchdb": "^1.0.8",
"hexo-generator-sitemap": "^1.2.0",
"hexo-generator-tag": "^0.2.0",
"hexo-render-pug": "^1.2.0",
"hexo-renderer-ejs": "^0.3.1",
"hexo-renderer-jade": "^0.4.1",
"hexo-renderer-marked": "^0.3.0",
"hexo-renderer-stylus": "^0.3.1",
"hexo-server": "^0.3.1"
},
"devDependencies": {
"gulp": "^3.9.1",
"gulp-autoprefixer": "^5.0.0",
"gulp-less": "^4.0.0"
}
}

版本 version 格式号如下:

1
<major>.<minor>.<patch>

  • major: 主版本号
  • minor: 次版本号
  • patch: 修复版本号

格式:version

必须完整匹配对应指定版本。

例如:"<npm 包名>": "0.0.5",,则必须依赖 0.0.5 版本的 npm 包

格式:^version

兼容某个版本:

  • 版本号中最左侧非 0 数字的右侧数字可以任意
  • 若缺少某个版本号,则该版本号的位置可以任意

例如:"<npm 包名>": "^1.1.2",则表示 >=1.1.2 && <2.0.0
例如:"<npm 包名>": "^0.2.3",则表示 >=0.2.3 && <0.3.0
例如:"<npm 包名>": "^0.0",则表示 >=0.0.0 && <0.1.0

格式:~version

大概匹配某个版本:

  • 如果 minor 版本号指定了,那么 minor 版本号不变,而 patch 版本号任意
  • 如果 minor 和 patch 版本号未指定,则 minor 和 patch 版本号任意

例如:"<npm 包名>": "~1.1.2",则表示 >=1.1.2 && <1.2.0
例如:"<npm 包名>": "~1.1",则表示 >=1.1.0 && <1.2.0
例如:"<npm 包名>": "~1",则表示 >=1.0.0 && <2.0.0

格式:version

必须匹配某个版本。

例如:"<npm 包名>": "1.1.2",则表示依赖 1.1.2 版本;

格式: >version

必须大于某个版本。

例如:"<npm 包名>": ">1.1.2",则表示大于 1.1.2 版本;

格式: >=version

必须大于等于某个版本。

例如:"<npm 包名>": ">=1.1.2",则表示大于等于 1.1.2 版本;

格式: <version

必须小于某个版本。

例如:"<npm 包名>": "<1.1.2",则表示小于 1.1.2 版本;

格式: <=version

必须小于等于某个版本。

例如:"<npm 包名>": "<=1.1.2",则表示小于等于 1.1.2 版本;

格式: x-range

x 的位置表示任意版本。

例如:"<npm 包名>": "1.1.x",则表示 >=1.1.0 && <1.2.0

格式: *-range

任意版本。

“” 也表示任意版本。

例如:* 表示 >=0.0.0 的任意版本。

格式: versionA - versionB

表示大于等于 versionA 且小于等于 versionB。

例如:"<npm 包名>": "1.1.2 - 1.3.1",则表示 >=1.1.2 && <=1.3.1

格式: rang1 || range2

表示满足 range1 或者满足 range2,可以多个范围。

例如:"<npm 包名>": "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0",则表示满足这 3 个范围的版本都可以;

参考