Jenkins構建項目報錯,依賴找不到
Error: Couldn't find any versions for "@babel/helper-module-imports" that matches "^7.22.15"at MessageError.ExtendableBuiltin (/data1/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node16/lib/node_modules/yarn/lib/cli.js:721:66)at new MessageError (/data1/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node16/lib/node_modules/yarn/lib/cli.js:750:123)at Function.<anonymous> (/data1/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node16/lib/node_modules/yarn/lib/cli.js:50351:13)at Generator.next (<anonymous>)at step (/data1/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node16/lib/node_modules/yarn/lib/cli.js:310:30)at /data1/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node16/lib/node_modules/yarn/lib/cli.js:321:13at runMicrotasks (<anonymous>)at processTicksAndRejections (node:internal/process/task_queues:96:5)
Build step 'Execute shell' marked build as failure
Deleting 1 temporary files
SSH: Current build result is [FAILURE], not going to run.
Finished: FAILURE
前置小知識
Node.js中package.json中^和~的區別
~
會匹配最近的小版本依賴包,比如~1.2.3會匹配所有1.2.x版本,但是不包括1.3.0^
會匹配最新的大版本依賴包,比如 ^1.2.3會匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0
分析問題
- 由于項目依賴一般都以
~
或者^
開頭,npm源某些依賴如果升級,那我們項目在構建的時候,就會根據前置小知識中的規則去獲取最新包 - 公司搭建了npm私有源,但是與npm官方源同步頻率時間未設置,導致下載不到應有的最新的包
解決方案
方案一
- 去npm官方網站看當前下載失敗的依賴上一次穩定的版本號
- 找到合適的版本號 在項目中
package.json
進行鎖定版本號,舉例說明如下:{"resolutions": {"@babel/helper-module-imports": "7.22.5",} }
方案二
npm私有源是通過
Nexus
統一管理的
- 登錄Nexus
- 我們配置npm私有源一般會建立三個倉庫
項目 | 說明 |
---|---|
hosted | 本地倉庫。提供本地私庫功能 |
group | 組倉庫。組類型,可以組合多個倉庫為一個地址提供服務 |
proxy | 代理倉庫。提供代理其他倉庫的類型,可以設置官方源或者鏡像源 |
- 進入proxy倉庫配置頁
- 修改配置
Maximum component age
這個的含義是獲取到 remote 包后,多長時間開始緩存,改成 -1, 意思是獲取到就緩存
Maximum metadata age
多長時間去 remote 倉庫獲取下源信息, 默認是 30天 ,
比方說 vue 這個包,今天上午10點發布了一個版本 2.7.15,你在11點執行 npm install vue@2.7.15,是會報 404 的,因為私服是30天獲取一次 remote 倉庫的信息,所以最好設置 30分鐘以內,這樣就可以快速獲取到更新了