简介
npm-check-updates(ncu)是一个用于检查和更新工作区内 package.json 中依赖项版本的工具,除了当前项目范围内的依赖外,还可以检查和更新全局类型的依赖,如使用 npm、pnpm,通过 --global 安装的依赖。
使用前需知
ncu 能做到的事情,你使用 npm 或 pnpm 等基本都可以做到(如果记得住命令的话~),如只是简单的升级项目或 workspace 中的依赖版本,可使用提供的 update 或 upgrade 等命令
ncu 支持检查依赖和使用交互模式来更新,且在 workspace 中使用相对更简洁
semver - 语义化版本控制规范
X.Y.Z => Major.Minor.Patch => 主版本号.次版本号.修订号
常用的版本控制符号:
- ~ 只允许更新 修订版本
- ^ 允许更新次版本号和修订号
- * 匹配最新的任意版本(如测试版本)
- latest 安装该包的最新稳定版本(通常是发布的最新正式版)
Npm
同样,使用 npm 提供的命令,也能很快将相关依赖更新。如配合 git 记录来说,与使用 ncu 体感上无明显区别
# 根据当前 package.json 中的 semver 规范升级版本
npm update
# 无视规范,使用最新版本
npm update --latest
# 更新全局范围的依赖,可通过 npm ls -g 查看当前拥有哪些全局依赖
npm update -g
pnpm
# 同 npm
pnpm update
# or
pnpm up
# or
pnpm upgrade
# 同 npm
pnpm up --latest
# 更新全局依赖
pnpm update -g
yarn
yarn upgrade
yarn upgrade --latest
yarn global upgrade
安装
全局安装时可直接使用
ncu命令
npm install -g npm-check-updates
也可在命令行直接使用
npx npm-check-updates
ncu registry
ncu 的相关命令使用到的源 registry 默认都是从 ~/.npmrc 中获取,你可以使用 ncu -r https://xxx 设置对应的源地址。
或者直接修改 npm 的
registry配置,推荐使用 nrm 进行设置
npm config set registry https://xxx
检查当前项目 package.json 中的 devDependencies 和 dependencies 依赖的最新版本(无视当前的 semver 规范)
默认寻找当前执行目录中的
package.json文件
$ ncu
ncu -i --format group - 交互模式
通过 -i 开启交互模式,通过 空格 选中需要升级的依赖,回车 升级。通过 --format group 可按 semver 规范分组显示,方便评估升级带来的影响。
$ ncu -i --format group
ncu --target <semver> - 遵循 semver 规范
默认 ncu 会忽略当前 package.json 中的 semver 规范,使用最新的版本,可设置 target 来更改依赖更新策略。
# 遵循当前 package.json 中的 semver 规范
ncu --target semver
# 安装最新的 次版本和修订版
ncu --target minor
# 只更新 修订版
ncu --target patch
更新 npm 安装的全局依赖
ncu 默认使用的 packageManager 是 npm,如需更新通过 npm 安装的全局依赖,则如下面命令
# 检查 npm 的全局依赖
ncu -g
更新其他 packageManager 安装的全局依赖
不同 包管理工具 安装的全局依赖的路径是不同的,如默认情况下 npm 安装的全局依赖路径是 /usr/local/lib/node_modules,pnpm 安装的全局依赖路径是 ~/Library/pnpm/global,若都是默认安装的,则可以通过指定 -p 来指定对应的包管理工具。
pnpm default global path => https://pnpm.io/zh/next/npmrc#global-dir
packageManager(-p)支持的值:npm, yarn, pnpm, deno, bun, staticRegistry
# 查询当前全局依赖的安装目录
$ npm root
# or
$ pnpm root
# 更新通过 pnpm 安装的依赖
$ ncu -g -p pnpm
如是通过 nvm 或其他工具安装的 npm、pnpm 等,可通过 --prefix 来指定对应的路径,可以通过 [p]npm config get prefix 来查看当前的执行程序的(bin)路径
$ pnpm config get prefix
$ ncu -g -p pnpm --prefix <上面获取的路径>
在 workspace 项目中使用
类似 pnpm --recursive,通过 -ws 可以让 ncu 像 recursive 一样,可以在每个 repo 和 root 中执行命令
ncu -ws --root
进阶使用
配合 pnpm catlogs 使用
ncu 目前未支持 catlogs 协议(WIP 中),可以通过 --packageData 将修改后的 package.json 数据传给 ncu 再进行更新
脚本模块中使用
在 node 脚本中获取需要更新的依赖数据
import ncu from 'npm-check-updates'
const upgraded = await ncu.run({
packageFile: '../package.json',
upgrade: true,
})
console.log(upgraded) // { "mypackage": "^2.0.0", ... }
























