如何检测及升级项目中的 Node 依赖

在现代前端开发中,一个项目每每依赖众多第三方包,多则几十个甚至过百,那么如何检测及升级这些依赖就成为了难题。前端

npm outdated 和 npm update

好在 npm 给咱们提供了 npm outdatednpm update 这两个命令。 node

进入一个较旧的 react 项目,而后执行 npm outdated,如预期的同样,给出了升级建议。react

image.png

而后执行 npm update 进行升级。没反应 ??? linux

看了看 --help,莫非是使用姿式不对?尝试 npm update less 。没反应 +1 😯webpack

继续尝试 npm update less --save,没反应依旧😓。git

图中出现的 Wanted 归 Wanted,但仍是想升级到 Latest 😂

而后经过 npm update --dd 查看了详细日志,发现最终始终都会出现这样一些提示:github

image.png

貌似是升级无望了 🤕。笔者认为这多是为了对于项目的稳定考虑?毕竟跨大版本升级,仍是颇有风险的。但小版本也不升级这就说不过去了。web

看来 npm update 是期望不上了。shell

因而 ncu 来了!npm

神器 ncu

ncunpm-check-updates,它能够检测并更新 package.json 中的依赖包为最新的 latest 版本。下面就来看下如何使用。

首先是安装依赖包 npm install -g npm-check-updates,固然也能够不安装,使用 npx 执行,这里笔者使用的全局安装的方式。

安装完毕后,能够经过 npm-check-updates 执行命令,也能够经过 ncu 快捷执行。

检测可升级的依赖包

依然是刚才那个旧的 react 项目,执行 ncu 进行升级检测:

image.png

嗯!看起来清晰多了,直接给出了能够升级到的最新版本,这里的截图只截了一部分,列表还有好长…。可是问题不大,毕竟 ncu 能够一键升级。

一键升级

ncu 给咱们提供了一键升级的命令参数 -u,执行 ncu -u便可。

执行完毕后输出信息较长,只挑了最后一句:

Run npm install to install new versions.

干脆利索,让人怀疑😯。而后到 package.json 中查看,果真是个实力派,能升级全给升级到最新版本了。

执行一键升级须要慎重,毕竟 ncu -u 不会考虑跨版本兼容的问题,有些包进行大版本升级时可能会不兼容,这里须要注意,要作好改代码的准备。

全局包检测、按需检测

固然 ncu 还能够检测全局安装的包,执行 ncu -g 便可:

image.png

不单单如此,若是只需检测单独的某个包、或者须要忽略掉某个包,这都是能够的,这是 ncu 仓库给出的使用示例:

# upgrade only mocha
ncu mocha
ncu -f mocha
ncu --filter mocha

# upgrade packages that start with "react-"
ncu react-*
ncu "/^react-.*$/"

# upgrade everything except nodemon
ncu \!nodemon
ncu -x nodemon
ncu --reject nodemon

# upgrade only chalk, mocha, and react
ncu chalk mocha react
ncu chalk, mocha, react
ncu -f "chalk mocha react"

# upgrade packages that do not start with "react-".
ncu \!react-*
ncu '/^(?!react-).*$/' # mac/linux
ncu "/^(?!react-).*$/" # windows

配置文件模式

若是以为在命令行里输入各类过滤条件太麻烦,那还有更方便的使用方式,那就是建立一个配置文件,如 .ncurc.json

{
  "upgrade": true,
  "reject": ["webpack", "antd"]
}

可配置字段释义:

  • upgrade: 是否须要一键升级
  • filter:只升级哪些模块
  • reject:要忽略掉哪些模块

固然配置文件命名仍是随意的,如默认套路式命名:.ncurc.{json,yml,js}。或者是自定义文件名,而后使用 --configFileName
--configFilePath 进行文件指定。

API 调用

ncu 还对外暴露了 API,咱们能够经过编程的方式检测并升级某个项目的依赖包。使用示例以下:

const ncu = require('npm-check-updates');

(async () => {
  const upgraded = await ncu.run({
    // Pass any cli option
    packageFile: './package.json',
    upgrade: true,
    // Defaults:
    // jsonUpgraded: true,
    // silent: true,
  });

  console.log(upgraded); // { "mypackage": "^2.0.0", ... }
  // `upgrade: false`:返回可升级的包及最新版本信息
    // `upgrade: true`:返回已经升级的包及最新版本信息
})();

目前,咱们的脚手架里就用到了这个特性,经过脚手架来对项目依赖进行升级。

OK,以上就是关于 Node 依赖检测并升级的所有内容,你开始用 ncu 了吗?

相关文章
相关标签/搜索