如何檢測及升級項目中的 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 了嗎?

相關文章
相關標籤/搜索