
博客目录
核心规则:~(波浪号)
含义:允许更新到最后一位指定的数字的更高版本,但锁定所有更左侧的版本号。
它的行为取决于你提供了多少位版本号:
-
~主.次.补丁(例如~24.11.1)- 锁定: 主版本和次版本。
- 允许更新: 补丁号可以增加。
- 例子:
~24.11.1等价于>=24.11.1 <24.12.0。允许24.11.1,24.11.2,24.11.99,但不允许24.12.0或25.0.0。
-
~主.次(例如~24.11)- 锁定: 主版本。
- 允许更新: 次版本可以增加,补丁号任意。
- 例子:
~24.11等价于>=24.11.0 <25.0.0。允许24.11.0,24.11.1,24.12.0,24.99.0,但不允许25.0.0。
-
~主(例如~24)- 锁定: 无(这种情况下不常用,通常直接用
^或>=)。 - 允许更新: 主、次、补丁均可增加(但实际行为在 npm 中可能等同于
^24.0.0)。
- 锁定: 无(这种情况下不常用,通常直接用
最常见和推荐的用法是 ~主.次.补丁,因为它能确保只自动引入错误修复(遵循语义化版本规范),而不会引入可能破坏兼容性的新功能。

与其他符号的对比表
| 符号 | 名称 | 规则(以 24.11.1 为例) |
允许的版本示例 | 不允许的版本示例 | 用途 |
|---|---|---|---|---|---|
~24.11.1 |
波浪号/兼容版本 | 锁定主版本和次版本,允许补丁号更新。 | 24.11.1, 24.11.2, 24.11.9 |
24.12.0, 25.0.0 |
获取安全修复和 bug 修复,风险最低。 |
^24.11.1 |
插入符/默认范围 | 锁定主版本,允许次版本和补丁号更新。 | 24.11.1, 24.11.2, 24.12.0, 24.99.0 |
25.0.0 |
获取向后兼容的新功能,最常用。 |
24.11.1 |
精确版本 | 严格锁定该版本。 | 24.11.1 |
任何其他版本 | 确保绝对一致,用于锁定生产环境。 |
>=24.11.1 |
大于等于 | 任何大于或等于此版本的版本。 | 24.11.1, 24.12.0, 25.0.0, 30.0.0 |
24.11.0, 23.0.0 |
指定最低要求,允许大版本升级。 |
>24.11.1 |
大于 | 任何大于此版本的版本。 | 24.11.2, 24.12.0, 25.0.0 |
24.11.1, 24.11.0 |
明确排除当前版本。 |
<=24.11.1 |
小于等于 | 任何小于或等于此版本的版本。 | 24.11.1, 24.10.0, 23.0.0 |
24.11.2, 24.12.0 |
设置最高版本上限。 |
* 或 x |
通配符 | 匹配任何版本。 | 所有版本 | 无 | 不推荐,可能导致意外升级。 |
实际应用建议
- 库开发者 :在
package.json中声明依赖时,通常使用^范围,给予使用者最大的兼容性灵活性。 - 应用开发者 :
- 在
package.json中可以使用^来获取新功能。 - 在生成锁文件 (如
package-lock.json,yarn.lock)后,这个文件会记录当前安装的精确版本,确保团队和生产环境的一致性。^或~只影响npm update或重新安装时的版本选择。 - 对于极其关键、不希望有任何变化的依赖 ,可以考虑使用
~甚至精确版本号。
- 在
- 安全修复 :当某个依赖发布了安全补丁(如从
24.11.1升级到24.11.2),使用~24.11.1的项目在运行npm update时会自动获取这个修复,而使用^24.11.1的项目也会获取。
觉得有用的话点个赞
👍🏻呗。❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
