簡體   English   中英

npm 安裝:提取時驗證失敗

[英]npm install: Verfication failed while extracting

回答前閱讀:我已經解決了這個問題。 這是 npm 服務器上的緩存問題。 切換到 GitHub 封裝后一切正常。 我已經接受了我自己的答案




我有一個項目,我想將其部署到彈性 beanstalk,但有時在 npm 安裝腳本上部署失敗,並顯示以下消息:

npm ERR! code EINTEGRITY
npm ERR! Verification failed while extracting @my-package@^1.2.0:
npm ERR! Verification failed while extracting @my-package@^1.2.0:
npm ERR! sha512-lQ...HA== integrity checksum failed when using sha512: wanted sha512-lQ...HA== but got sha512-nH...ow==. (4835509 bytes)

它甚至在嚴重幾周前的包裹上也失敗了。

我試過了:

  • npm cache clean --force

  • npm cache verify

  • node_modules.npmignore

  • package-lock.json.npmignore

  • 寫一封郵件給 support@npmjs.com,但他們總是回復一些無助的默認回復,沒有任何解決方案或幫助的意圖。

即使在新的彈性 beantalk 實例上它也會失敗。

我不知道如何解決這個問題。

編輯:我還嘗試在預安裝腳本時刪除 npm 緩存,但它也不起作用。

EDIT2:我的倉庫沒有package-lock.json

EDIT3:我的.npmrc文件具有以下內容

      //registry.npmjs.org/:_authToken=${NPM_TOKEN}
      unsafe-perm=true
      package-lock=false
      strict-ssl=false

EDIT4:我認為還不清楚:這是官方 npm 注冊表上的私有 package。 而且它並不總是失敗。 當前的發布過程包括多次嘗試在 aws 實例上部署,只要它成功即可。

您是否嘗試刪除 package-lock.json?

或者

嘗試刪除 npm 和 npm-cache 文件夾

然后

重新運行 npm 安裝

不完全是您的情況,但對於那些遇到“完整性校驗和失敗”錯誤的人,以下可能會有所幫助。 但首先要確保你了解發生了什么。 npm告訴您來自https://registry.npm.org的校驗和與來自package-lock.json的校驗和不匹配。 要么它在注冊表中更改,要么...

考慮 output 中的一行:

npm ERR!
  sha512-lQ...HA==
integrity checksum failed when using sha512: wanted
  sha512-lQ...HA==
but got
  sha512-nH...ow==
. (4835509 bytes)

通過前兩個完整性校驗和( sha512-lQ...HA== )在package-lock.json中找到 package ,並將第三個( sha512-nH...ow== )放入其“完整性”字段。

更多關於它的信息

這似乎是 npm 服務器的緩存問題。 我們已經從 npm 切換到 GitHub 包,一切正常。

可能是這些實例上的 NPM 版本已過期。 你可以試試: npm install -g npm

您是否確保將其部署到 beanstalk 時,包鎖定文件不在實例上? - 如果你有一個壞鎖文件,它需要被刪除並重新生成。

除此之外,您似乎已經用盡了很多選擇,因此需要更多信息。

如果您請求的版本在注冊表中不可用,則可能會發生這種情況。

使用@my-package@^1.2.0 ,您請求的版本介於 >=1.2.0 和 <2.0.0 之間。 難道這個注冊表上只有一個早於 1.2.0 或高於 2.0.0 的版本? Npm 將安裝它得到的任何東西,並且不會在此處引發錯誤。

您可以通過查看node_modules/my-package/package.json來檢查您在 npm 安裝中獲得的版本。

如果在執行本地npm install時沒有發生這種情況,請檢查 Amazon 使用的 npm 注冊表是否包含您的my-package package。

您可以嘗試將官方 npm 注冊表添加到您的 Beanstalk 項目中,以檢查它是否是不包含您的 package 的 Amazon npm 注冊表。 請參閱如何在 Elastic Beanstalk 上使用私有 npm 注冊表? 這個怎么做。

  • 這似乎是一個 package-lock.json 問題。 正如在這個答案

如果你沒有在你的倉庫中推送 package-lock.json ,它將在運行 npm 安裝時生成。 所以最好在 repo 中添加 package-lock.json 以避免本地機器和部署機器之間的 package-lock.json 文件不一致。

您能否嘗試將新的 package-lock.json 文件推送到 repo 並嘗試?

您是否嘗試過修改my-package的版本,然后直接指定確切的版本而不是范圍?

作為一種解決方法,請按照以下步驟操作:

  • Go 到工程目錄
  • 刪除 node_modules 目錄:rm -rf node_modules。
  • 刪除 package-lock.json 文件:rm package-lock.json
  • 清除緩存:npm cache clean --force
  • 運行 npm install --verbose

如果按照上述步驟操作后問題仍然存在,請使用 --verbose 向我們提供安裝命令的 output。

就我而言,正如 razki 所暗示的那樣,構建服務器上的 npm/node 版本與開發人員本地計算機上的版本有很大不同。 更新到足夠接近的版本擺脫了這個問題。
例如:
構建服務器有:npm/6.13.4 node/v12.14.1
開發者有:npm/6.14.8 node/v14.15.1。
現在構建服務器:npm/6.14.10 node/v14.15.4

似乎不同的版本對相同的 package 計算 sha 的方式不同。 這就是為什么刪除 package-lock.json 文件可以在這種特殊情況下工作的原因 - 至少在一段時間內,直到具有不同版本的計算機再次嘗試構建項目。

基本上它對 npm 寄存器的關注,一些家庭 npm 寄存器已更新為另一個 url。

您可以運行以下命令查看 npm 注冊

npm config get registry

應該設置它

https://registry.npmjs.org/

如果不是,則在命令下方運行

npm config set registry https://registry.npmjs.org/

它將設置 npm 寄存器。 現在你可以再試一次

npm i

它將成功安裝 package。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM