版本号规则
从日常的开发中我们可以看到,npm 包的版本号的格式都是 X.Y.Z。那么大家发布的 npm 包为什么都在遵循这个格式呢?这个格式其实是由 Gravatars 创办者兼 GitHub 共同创办者 Tom Preston-Werner 所建立。由 GitHub 起草的统一的版本号表示规则,称为 Semantic Versioning(语义化版本表示)。这些规范具体包含的内容大家可以参考语义化版本 2.0.0。本文只针对我们开发中容易忽略的地方做一些详述。
-
X 代表主版本号,也叫做大版本号
升级大版本时意味着这个包可能做了颠覆性的改动,和低版本的包已经无法兼容。每当主版本号递增时,次版本号和修订号必须归零。
-
Y 代表次版本号,也叫做小版本号
当做了向下兼容的功能性新增时,升级小版本号。每当次版本号递增时,修订号必须归零。
-
Z 代表修订号
当做了向下兼容的问题修正(bugfix)时, 升级修订号。
常见版本格式/引用方式
版本引用方式 | 版本号 | 匹配版本 | 解释 |
直接使用版本号 | 2.3.1 | 2.3.1 | 只可以匹配 2.3.1 这个版本,如果是比较重要的项目,建议用这种方式固定版本。 |
^:不能修改版本号最左侧非零数字 | ^2.3.1 | >= 2.3.1 && < 3.0.0 | 最左侧非零数字是 2 |
^0.3.1 | >= 0.3.1 && < 0.4.0 | 最左侧非零数字是 3 | |
^0.0.1 | >= 0.01 && < 0.02,即 0.01 | 最左侧非零数字是 1 | |
~:版本号列出 Y 时兼容 Z 的修改。列出 X 时兼容 Y、Z | ~2.3.1 | >= 2.3.1 && < 2.4.0 | Y 为 3。~2.3 同理 |
~2 | >= 2.0.0 && < 3.0.0 | X 为 2 | |
*、X、x,空:表示可以匹配任何版本 | "2.3.X"、"2.3.x"、"2.3*"、"2.3" | >= 2.3.0 && < 2.4.0 | Z 可以为任意值 |
"2.X"、"2.x"、"2.*"、"2" | >= 2.0.0 && < 3.0.0 | Y、Z 为任意值 | |
*、X、x,空 | 任意版本 | 任意版本指的是最新的正式版 |