在古代前端开发中,一个我的项目往往依赖泛滥第三方包,多则几十个甚至过百,那么如何检测及降级这些依赖就成为了难题。

npm outdated 和 npm update

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

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

而后执行 npm update 进行降级。没反馈 ???

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

持续尝试 npm update less --save,没反馈仍旧。

图中呈现的 Wanted 归 Wanted,但还是想降级到 Latest

而后通过 npm update --dd 查看了具体日志,发现最终始终都会呈现这样一些提醒:

貌似是降级有望了 。笔者认为这可能是为了对于我的项目的稳固思考?毕竟跨大版本升级,还是很有危险的。但小版本也不降级这就说不过去了。

看来 npm update 是指望不上了。

于是 ncu 来了!

神器 ncu

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

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

装置结束后,能够通过 npm-check-updates 执行命令,也能够通过 ncu 快捷执行。

检测可降级的依赖包

仍然是方才那个旧的 react 我的项目,执行 ncu 进行降级检测:

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

一键降级

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

执行结束后输入信息较长,只挑了最初一句:

Run npm install to install new versions.

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

执行一键降级须要谨慎,毕竟 ncu -u 不会思考跨版本兼容的问题,有些包进行大版本升级时可能会不兼容,这里须要留神,要做好改代码的筹备。

全局包检测、按需检测

当然 ncu 还能够检测全局装置的包,执行 ncu -g 即可:

不仅仅如此,如果只需检测独自的某个包、或者须要疏忽掉某个包,这都是能够的,这是 ncu 仓库给出的应用示例:

# upgrade only mochancu mochancu -f mochancu --filter mocha# upgrade packages that start with "react-"ncu react-*ncu "/^react-.*$/"# upgrade everything except nodemonncu \!nodemonncu -x nodemonncu --reject nodemon# upgrade only chalk, mocha, and reactncu chalk mocha reactncu chalk, mocha, reactncu -f "chalk mocha react"# upgrade packages that do not start with "react-".ncu \!react-*ncu '/^(?!react-).*$/' # mac/linuxncu "/^(?!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 了吗?