在 package.json 文件中,可以通过多种方式定义依赖包的版本范围。以下是常见的版本定义方式(基于 npm 的语义化版本规范):
1. 精确版本(Exact Version)
- 安装指定版本,不自动更新:
"dependencies": {
"lodash": "4.17.21"
}
2. 兼容版本(Compatible Updates)
-
^(主版本锁定)
允许次版本和补丁版本升级(不更改最左侧非零版本号):"^4.17.21" // 允许 4.x.x(≥4.17.21 且 <5.0.0) -
~(次版本锁定)
允许补丁版本升级:"~4.17.21" // 允许 4.17.x(≥4.17.21 且 <4.18.0)
3. 版本范围(Version Ranges)
-
区间范围:指定版本区间
"2.1.0 - 3.0.0" // ≥2.1.0 且 ≤3.0.0 -
比较符范围:
">1.0.0", ">=2.3.0 <3.0.0", "<=4.5.6"
4. 通配符(Wildcards)
-
x或*表示任意版本:"" // 任意版本(不推荐) "4.x" // 4.x.x(等价于 ^4.0.0) "4.17.x" // 4.17.x(等价于 ~4.17.0)
5. 预发布版本(Pre-release Versions)
- 明确指定带标签的预发布版本:
"1.0.0-beta.2"
6. 非注册表来源
-
Git 仓库(支持分支/提交/Tag):
"package": "git+https://github.com/user/repo.git#branch" -
本地路径:
"package": "file:../local-directory" -
Tarball 地址:
"package": "https://example.com/package.tgz"
7. 标签(Dist Tags)
- 使用 npm 发布的标签(如
latest、next):"package": "next"
示例汇总
{
"dependencies": {
// 精确版本
"react": "18.2.0",
// 允许次版本和补丁更新
"react-dom": "^18.2.0",
// 仅允许补丁更新
"typescript": "~5.0.4",
// 版本范围
"eslint": ">=8.0.0 <9.0.0",
// Git 仓库(指定分支)
"private-pkg": "git+https://github.com/user/private-pkg.git#main",
// 本地路径
"local-util": "file:../utils",
// 预发布版本
"experimental-pkg": "1.0.0-alpha.3"
}
}
注意事项
-
默认行为:
npm install package --save默认使用^前缀(如^1.0.0)。 -
锁定文件:
实际安装版本由package-lock.json或yarn.lock锁定,确保一致性。 -
预发布版本:
需明确指定(如1.0.0-beta.0),否则范围匹配(如^1.0.0)不会包含预发布版。
通过灵活组合这些规则,可以精确控制依赖包的更新策略。