包版本号组成
npm (Node Package Manager) 是一种应用于 JavaScript 编程语言的包管理器,也是 Node.js 的 JavaScript 运行时环境的默认包管理器
在一个项目中,其包依赖项列表保存在 package.json 文件中,每个已安装的包都被分配了一个版本号,一般由 3 部分组成:major.minor.patch:
major 表示非兼容的重大 API 改变(主要的)
minor 表示向后兼容的功能性改变(次要的)
patch 表示向后兼容的 bug 修正(修补的)
依赖包对应版本号前缀符号含义:
* 匹配最新的 major 版本依赖包
^ 匹配最新的 minor 版本依赖包,eg: 1.1.0 可以更新匹配所有 1.x.x 的包,不会更新匹配 2.x.x
~ 匹配最新的 patch 版本依赖包,eg: 1.1.0 可以更新匹配所有 1.1.x 的包,不会更新匹配 1.2.x
- 没有前缀表示固定版本号, 版本不会更新匹配任何其他版本需要,手动修改 package.json 文件中的包版本
默认情况下,npm 会安装最新的版本,并在版本号前面附加一个 ^ 插入符号,如 ^15.2.0,有这种插入符号的依赖项意味着至少要安装 15.2.0;当存在一个更高的 minor 版本时,它就可能被使用,比方说当时有了个 15.6.2,就会在安装时升级到该版本
查看可更新的包
1 2 3 4 5 6
| $ npm list -g --depth 0 $ npm view package-name version $ npm view package-name versions $ npm outdated Package Current Wanted Latest Location npm-check-updates 16.14.20 17.1.11 17.1.11 node_modules/npm-check-updates
|
输出字段说明:
- Package 显示包名
- Current 当前包安装的版本
- Wanted 根据 package.json 包版本前缀规则可以更新的最新版本号
- Latest 是该包在仓库中标记为 latest 的版本
- Location 是该包在所居于的依赖树中所在的位置
Package 字段的字体颜色含义(上述代码片段中未正确显示):
- 红色:根据 package.json 中包版本前缀规则可更新的依赖包
- 黄色:根据 package.json 中包版本前缀规则不可更新的依赖包
升级包
以下述包版本变化为例,package.json 不做任何修改,查看 npm update 和 npm install 升级包时行为不同之处
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| $ npm ls --all npm_package@ /home/test/npm_package └─┬ micromatch@4.0.1 ├─┬ braces@3.0.3 │ └─┬ fill-range@7.1.1 │ └─┬ to-regex-range@5.0.1 │ └── is-number@7.0.0 └── picomatch@2.3.1 $ cat package.json { "dependencies": { "micromatch": "^4.0.1" } } $ npm outdated Package Current Wanted Latest Location Depended by micromatch 4.0.1 4.0.8 4.0.8 node_modules/micromatch npm_package
|
npm update
- 更新符合 package.json 允许版本的包:如本例中 package.json 中的版本号是 ^4.0.1,运行 npm update 会更新到 4.x.x 范围内的最新版本(例如 4.0.8),但不会跳到 5.x.x
1 2 3
| $ npm ls npm_package@ /home/lingxing/Workspace/test/npm_package └── micromatch@4.0.8
|
- 不会修改 package.json 中的版本号
1 2 3 4 5 6 7
| $ cat package.json { "dependencies": { "micromatch": "^4.0.1" } }
|
- 会更新 package-lock.json 中的具体依赖版本,使其与新安装的版本一致
npm install
- 更新符合 package.json 允许版本的包:如本例中 package.json 中的版本号是 ^4.0.1,运行 npm install 不会更新
1 2 3
| $ npm ls npm_package@ /home/lingxing/Workspace/test/npm_package └── micromatch@4.0.1
|
- 不会修改 package.json 中的版本号
1 2 3 4 5 6 7
| $ cat package.json { "dependencies": { "micromatch": "^4.0.1" } }
|
- 不会更新 package-lock.json 中的具体依赖版本
那如果要修改 package.json 升级呢?
be slow to promise and quick to perform.