【問題解決】npm ERR! code EINTEGRITY

問題說明

Jenkins構建前端安裝依賴報錯:

npm ERR! code EINTEGRITY
11:05:42  npm ERR! sha512-IJy2B5Ot9wIAGwjSKF94+8yhVCQUDBT4myzlswuJSNPcLcn3Jna3yPNOmp/mbXfPPSNFwV9td/8jadAPesUn7g== integrity checksum failed when using sha512: wanted sha512-IJy2B5Ot9wIAGwjSKF94+8yhVCQUDBT4myzlswuJSNPcLcn3Jna3yPNOmp/mbXfPPSNFwV9td/8jadAPesUn7g== but got sha512-DqWOWyL129Y56DPwO3VYTkcjILCS5szGZEaGgGVqdzBjCWiqVd2MqWDhnCvUpeSmXqnDV1uNlSpOIawwW/k8/Q==. (923576 bytes)

查了網上的一些說明,有的說可以刪除package-lock.json重新安裝可解決,而我這個是公司封裝的前端工具做的,看不到這個文件。

問題分析

EINTEGRITY 錯誤碼錶示在npm快取中無法找到 指定sha512校驗合的模組,得到的卻是另一個。就好比你在桌子上放了塊蛋糕被人換成了果汁,你還按蛋糕的資訊去找肯定得不到蛋糕。

出現這個問題的原因是快取不一致,一般安裝前端依賴時的package-lock.json會記錄每個依賴的文件校驗和,再安裝依賴時如果出問題就是快取變了而package-lock.json還是舊的,常見於全局快取。

還有一個就是有一個依賴在全局快取和當前項目快取(node_modules)中都存在但版本不同,快取校驗和對不上。

所以解決辦法應該有兩種:1、刪除記錄檢驗和的記錄文件 2、清理快取

解決方案

方案1 刪除package-lock.json

適用於當前構建目錄有package-lock.json文件,刪除它,然後重新安裝前端依賴即可。

方案2 快取校驗

npm cache verify

後邊會解釋它的作用。校驗完後重新安裝前端依賴即可。

方案3 強制快取清理

npm cache clean --force

後邊會解釋它的作用。校驗完後重新安裝前端依賴即可。

官方文檔怎麼說

//docs.npmjs.com/cli/v6/commands/npm-cache

根據npm v6的文檔,可以簡單理解npm快取是安裝依賴時就快取,也可以自己去添加快取,它本身不保證快取的可靠性,也就是說如果能發現快取就直接取。而且npm不會自主刪除快取,這就導致快取目錄會隨著安裝依賴的增多而變大,有損壞的內容也不會自動刪除。

有損壞的內容或者快取需要校驗時,可以執行 npm cache verify 校驗快取目錄的內容,清理不需要的數據,驗證快取索引與快取數據的完整性。

比較強制的辦法就是直接刪除快取目錄所有數據,對應的命令是 npm cache clean --force

(本文完)