package.json文件是Node.js项目中的一个重要文件,它包含了项目的各种元信息,如项目名称、版本、描述、依赖关系等。其中,版本规则是package.json文件中的一部分,用于指定项目的版本号。
版本声明规则
package.json的版本号规则遵循 SemVer 规则,一般格式如下
{
"name": "my-project",
"version": "1.2.3"
}
可以看出,版本号通常以一个字符串的形式表示,格式为MAJOR.MINOR.PATCH
,其中MAJOR
、MINOR
和PATCH
都是非负整数,分别代表主版本号、次版本号和补丁版本号。这三个字母的含义分别如下:
- MAJOR:主版本号,通常在进行了不兼容的API变更时增加。
- MINOR:次版本号,通常在添加了新的功能或者在原有功能上进行改进,但仍然保持向下兼容时增加。
- PATCH:补丁版本号,通常在进行了向下兼容的错误修复时增加。
可以看出,平时我们安装的包都是遵循这个规则的版本号,我们在开发一些通用的npm包时,也要遵循这个规则。通常要发布的时候我们可以手动修改 package.json 文件的 version 字段来调整版本,或者通过命令行工具也可以,比如以下命令:
- 发布新子版本:
npm version minor
(递增次版本号)或npm version patch
(递增修订号)。 - 发布 rc 版本:
npm version prerelease --preid=rc
。
这些命令将自动更新 package.json
文件中的版本号,并将新版本发布到包管理器的注册表中。
版本修饰符
除了数字组成的版本号,我们还可以额外添加一些修饰符,修饰符是版本号的补充说明,用来表示该版本并非稳定或可能无法满足预期的兼容性需求。修饰符必须由ASCII字母数字和连接号组成,且禁止留白。数字型的修饰符禁止在前方补零。常见的修饰符如下表:
修饰符 | 含义 |
---|---|
alpha | 内部版本 |
beta | 测试版本 |
demo | 演示版本 |
enhance | 增强版本 |
fullVersion | 完整版本 |
final | 最终版本 |
ga | (General Availability):发行稳定版 |
rc | (Release Candidate):候选版本,几乎就是正式版了 |
我们平时在声明包版本时,可以参考当前项目的进展来使用对应的修饰符。
版本使用规则
在通过npm i xxx
命令安装包到项目后,会在package.json文件生成对应的包以及版本号,通常位于 dependencies
或者 devDependencies
下面。例如
"dependencies": {
"execa": "^8.0.1"
}
细心的朋友可能已经发现,为什么版本号前面有个特殊的箭头符号"^",这个"^",表示当更新包时,锁定主版本,将次版本更到最新。
除了"^"符号之外,其他符号的含义如下:
版本符号 | 含义 |
---|---|
精确版本号 | 只使用指定的精确版本,不适用符号。 |
波浪号(~) | 允许小版本号的变化,不允许大版本号变化。 |
插入号(^) | 允许小版本号和大版本号的变化,不允许主版本号变化。 |
星号(*) | 接受任何版本,不建议在生产环境中使用。 |
我们可以按需使用对应的符号,通常如果项目比较旧,不适合更新包版本,可以通过锁定版本来解决,即不加符号,然后重新执行安装命令即可。
"dependencies": {
"execa": "8.0.1"
}