每个项目的根目录下都有一个
package.json
文件,定义了这个项目所需的各种模块,以及项目的配置信息。其中,dependencies
字段指定了项目运行所依赖的模块,devDependencies
指定项目开发所需要的模块。
语义化版本管理
dependencies
和 devDependencies
都指向一个对象。该对象的各个成员,分别由模块名和对应的版本要求组成,表示依赖的模块及其版本范围。这里使用了 Semver (语义化版本)来控制。示例如下:
"dependencies": {
"@babel/core": "^7.5.4",
"@babel/preset-env": "^7.5.4",
"babel-core": "^6.26.3",
"babel-jest": "^24.8.0",
"babel-preset-env": "^1.7.0",
"jest": "^24.8.0",
"regenerator-runtime": "^0.13.2"
}
版本格式
一般为:
主版本号.次版本号.修订号
不同版本号递增规则如下:
- 主版本号(major):当你做了不兼容的 API 修改(大版本修改)
- 次版本号(minor):当你做了向下兼容的功能性新增,可以理解为 Feature 版本
- 修订号(patch):当你做了向下兼容的问题修正,可以理解为 Bug fix 版本
各种版本限定
- 指定版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。
- 波浪号(tilde)+指定版本:比如~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。
- 插入号(caret)+指定版本:比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。
- latest:安装最新版本。
- 更多可以参考:NPM版本控制符^,~,>,||,-的含义详解