博客 / 詳情

返回

[前端] 間接依賴的版本處理

最近工作裏遇到個問題,公司的流水線檢測到了某個前端工程中用到了vite @4.5.2,vite@4.5.2這個版本存在安全漏洞 CVE-2025-31486、CVE-2025-31125、CVE-2025-30208,是風險項,會被阻斷。

修復建議是vite升級到 [4.5.12, 5.0.0) [5.4.17, 6.0.0) [6.0.14, 6.2.0) 或 >=6.2.5 版本

我檢查了一下項目中所用到的依賴 (package.json中的依賴項),沒有發現vite的直接使用。

這裏的vite是一個間接依賴項,依賴關係大致如下
dumi
└─ @umijs/preset-dumi

 └─ @umijs/bundler-vite
     └─ vite@4.5.2


由於dumi是個強工具鏈,不能隨便換 bundler,不能隨便跳過內部依賴。

所以説我最先做的事情是嘗試升級dumi到當前的最新版本,看看這個最新版本里面的vite是否滿足修復要求。這個嘗試的結果是不行,vite的版本沒有到達4.5.12,不解決問題。

那麼只能繼續嘗試利用npm的overrides能力,升級vite的版本。
在package.json中加入 overrides 配置
{
"scripts": {},
"devDependencies": {},
"overrides": {

"vite": "4.5.12"

}
}

overrides方案往下走有兩條路線。

第一條路線
添加overrides配置後刪除node_modules文件夾,刪除package-lock.json文件,然後npm install 將所有依賴的配置強制升級到 4.5.12

第一條路線我嘗試了一下,由於是全量重新安裝,在vite版本成功升級到vite4.5.12的同時,大多數依賴項的版本都升級了,導致引入了新的風險項。
(問題出在@umijs/preset-umi 在重新安裝後版本為@4.4.12)

因此還不能這麼操作,要走第二條路線。
第二條路線
思路是利用overrides配置,最小化的修改package-lock.json中的vite版本。

首先回退第一條路線的package.json 和 package-lock.json文件,回到僅有vite版本被檢測出問題的節點。以此節點為基線做改動。

在package.json中添加overrides配置

"overrides": {
"@umijs/bundler-vite": {

  "vite": "4.5.12"

}
}

運行 npm install --package-lock-only

運行之後查看package-lock.json文件的前後差異,發現符合預期,僅將vite的版本升級到了4.5.12,其他依賴項版本沒有變更。

補充説明:
overrides方案能夠成功,有幾個前提

  1. 原 lock 裏的 umi / dumi / bundler-vite 版本是自洽的
  2. vite@4.5.12 滿足 bundler-vite 的 semver
  3. npm 版本 ≥ 8(支持 overrides)

如果這幾個前提不滿足,那確實無解。

完結。

同步更新到自己的語雀
https://www.yuque.com/dirackeeko/blog/zgivw2gu1hh4qsc7

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.