npm 包更新总结

常见的包更新方法有这么几种:

  1. npm update
  2. npm-check
  3. npm-check-updates

npm update

这个方法是 npm cli 自带的方法。
在开发的时候,经常会遇到 package.json 里的一些包很久不会更新的情况,你想升级下包的版本,笨一点的方法是挨个修改版本号然后 npm install 下。很费劲,这个时候可以考虑使用 npm update

实例

假设我们现在项目需要依赖 React,版本是 15.0.0

1
"react": "15.0.0"

我们用 npm update 做个升级:

1
$ npm update react

运行完之后我们打开 package-lock.json 看看,发现 React 无任何变化,依旧是 15.0.0:

为什么呢?我们看下官方文档:

This command will update all the packages listed to the latest version (specified by the tag config), respecting semver.

也就是说 npm update 的更新策略完全尊重语义化版本规范的。示例中 React 的版本是写死的15.0.0,所以 npm update 不会有任何变化。

我们把 react 的版本号改写一下:

1
"react": "^15.0.0"

然后运行:

1
$ npm update react

运行完之后我们打开 package-lock.json 看看,发现 React 版本已经变化了:

此时有个疑问,如何想把 React 直接升级到 16 版本?可以这样:

1
"react": "*"
1
$ npm update react

Tip: 但这样的版本号策略很不实用,抛弃。

npm-check

install

1
$ npm install -g npm-check

usage

具体使用方法看官方文档,这里只说几个常用的方法:

1
2
# 查找需要更新的包
$ npm-chcek

我们把 react 的版本再更新回之前的样子:

1
"react": "15.0.0"

然后运行:

1
2
# 查找需要更新的包,忽略掉没有使用的包的提示
$ npm-check --skip-unused

它会提示你 react 有更新的版本了 16.8.6 to go from 15.0.0 to 16.8.

现在我们来更新 React:

1
2
# 更新所有的依赖项,没有任何提示
$ npm-check --update-all

运行完之后,打开 package.jsonpackage-lock.json ,发现 React 的版本已经从 15.0.0 更新到最新的包了:


npm-check-updates

这个包的优势是将前两者结合在一起:

  • 可以指定是否尊重语义化版本规范
  • 可以忽略语义化版本规范

install

1
$ npm install -g npm-check-updates

usage

1
2
3
4
5
6
7
8
9
$ ncu
Checking package.json
[====================] 5/5 100%

express 4.12.x → 4.13.x
multer ^0.1.8 → ^1.0.1
react-bootstrap ^0.22.6 → ^0.24.0
react-a11y ^0.1.1 → ^0.2.6
webpack ~1.9.10 → ~1.10.5
1
2
3
4
5
6
7
8
9
$ ncu -u
Upgrading package.json
[====================] 1/1 100%

express 4.12.x → 4.13.x

Run npm install to install new versions.

$ npm install # update installed packages and package-lock.json

安装好之后,我们把 React 复原回 15.0.0 版本,我们来检查那些包可以更新:

1
$ ncu

会提示 react 可以更新 16.8.6 版本:

然后我们更新包:

1
$ ncu -u

运行完之后我们打开 package.json 发现版本已经更新了:

但是此时 package-lock.json 还没有更新,所以还需要运行一下:

1
$ npm install

npm-check-updates 也可以指定某一级别的版本力度更新(小版本号,修订号)。

–semverLevel find the highest version within “major” or “minor”

小版本号更新

1
2
# react  15.0.0  →  15.6.2
$ ncu -u --semverLevel major

修订号更新

1
2
# react  15.0.0  →  15.0.2
$ ncu -u --semverLevel minor

总结

  1. npm update 更新完全尊重 package.json 里的语义化版本规范的。
  2. npm-check 可以很方便的更新到包的最新版本。
  3. npm-check-updates 可以控制更新到任意版本力度的更新。但是要注意,需要运行一次安装。

开发的时候推荐 npm-check-updates