場景
????????CICD編譯時拋出npm error code EINTEGRITY的錯誤
npm error code EINTEGRITY
npm error sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== integrity checksum failed when using sha512: wanted sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== but got sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==. (318961 bytes)
npm error A complete log of this run can be found in: /root/.npm/_logs/2025-05-21T01_30_13_824Z-debug-0.log
解決
# 刪除 node_modules and package-lock.json
rm -rf node_modules package-lock.json# 清理和驗證 npm cache
npm cache clean --force
npm cache verify# 重新安裝
npm install
分析
? ? ? ? 在運行到npm install
命令時,會看到進程失敗并顯示EINTEGRITY
錯誤代碼。
????????錯誤示例輸出如下:????????
npm ERR! code EINTEGRITY
npm ERR! sha512-vjA...Azq==
integrity checksum failed when using sha512:wanted sha512-vjA...Azq==but got sha512-MjAA...LNsqvg==. (161379 bytes)npm ERR! A complete log of this run can be found in:
npm ERR! /Users/nsebhastian/.npm/_logs/2022-06-16T10_04_42_791Z-debug.log
? ? ? ? 這是因為運行npm install
命令時,npm
將查找package.json
文件中列為依賴項的包,進行下載和安裝。
? ?當package-lock.json
當目錄中有文件時,npm
會將下載的tarball.tgz
文件的校驗和與在package-lock.json
文件中找到的校驗和進行對比。
????????當文件和package-lock.json
文件EINTEGRITY
之間的校驗和值不匹配時,就會發生如上所示的錯誤。
? ?
這段錯誤消息大概意思是:npm
說想要sha512……
但得到的是sha512……
。
? ?wanted...
中的值是在package-lock.json
文件中找到的值。
????????got...
是npm
從tarball
文件生成校驗和時得到的值。
兩種方法可以解決此錯誤
1. 刪除package-lock.json
文件,并在安裝完成后讓npm
生成一個新文件。
2. 更新package-lock.jso
文件中列出的完整性值。搜索并替換文件中錯誤消息中的值,將想要的值sha512-vjA...
替換為sha512-MjAA...(最終選取該方法)
????????當然,如果文件中有很多EINTEGRITY
錯誤時,這會很煩人。這種情況下直接刪除package-lock.json
文件會更容易,因為npm
無論如何都會生成一個新文件。
????????如果上述方法不起作用,可按照以下步驟清除節點模塊和npm
緩存文件夾:
# remove node_modules and package-lock.json
rm -rf node_modules package-lock.json# Clear and verify npm cache
npm cache clean --force
npm cache verify# now run npm install again
npm install
校驗和值
????????校驗和值是從特定文件生成的字母數字哈希值,當文件內容改變時,校驗和值也會改變。
????????在npm
包中,校驗和用于驗證下載的文件的完整性。
????????第一次將包安裝為依賴項時,npm
將生成每個包的校驗和并將其存儲在文件中package-lock.json
。
下面是一個例子:
{"@babel/code-frame": {"version": "7.16.7","resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz","integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==","requires": {"@babel/highlight": "^7.16.7"}}
}
? ?integrity
上面依賴關系圖中的屬性是通過對code-frame-7.16.7.tgz
文件運行哈希sha512
函數生成的。
? ?npm install
以后運行時,npm
會再次對該code-frame-7.16.7.tgz
文件運行哈希函數,看校驗和是否與屬性中的一致integrity
。
????????當值不同時,npm
將拋出EINTEGRITY
錯誤代碼。
????????這就是刪除package-lock.json
文件有效的原因。因為這導致npm
將直接跳過包的校驗和比較過程(直到下次npm install
再次運行)
????????在npm
版本5之前,校驗和是用sha1
而不是生成的sha512
。
? ? ? ? 另外注意,有時npm
也會EINTEGRITY
因為不同的sha
哈希值而產生警告,如下所示:
npm WARN registry Unexpected warning for https://registry.npmjs.org/: Miscellaneous Warning EINTEGRITY: sha1-UWbihk...TIIM=
integrity checksum failed when using sha1:
wanted sha1-UWbihk...TIIM= but got sha512-yJHVQEh...pWft6kWBBcqh0UA==. (11423 bytes)
????????這意味著package-lock.json
文件中有sha1
值,但npm
生成sha512
值。
????????這種情況下,需要刪除node_modules
文件夾和package-lock.json
文件才能解決警告。
????????如果使用的是舊版本的npm
,請在再次嘗試安裝之前升級npm
版本:
# upgrade npm version
npm install -g npm@latest# remove node_modules and package-lock.json
rm -rf node_modules package-lock.json# Clear and verify npm cache
npm cache clean --force
npm cache verify# now run npm install again
npm install
????????依次運行上述命令以解決錯誤EINTEGRITY
。