npm install:提取时验证失败

npm install: Verfication failed while extracting

回答前先阅读: 我已经解决了这个问题。这是 npm 服务器上的缓存问题。切换到 GitHub 包后一切正常。我已经接受 .




我有一个项目,我想将其部署到 elastic 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)

即使在几个星期前的包裹上它也会失败。

我试过:

即使在新的弹性 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 注册表中的私有包。而且它并不总是失败。当前的发布过程包括多次尝试在 aws 实例上部署,只要它成功即可。

可能是这些实例上的 NPM 版本已过时。你可以试试:npm install -g npm

您确定当它被部署到 beantalk 时包锁文件不在实例上吗? - 如果您有坏锁文件,需要将其删除并重新生成。

除此之外,您似乎已经用尽了很多选择,因此需要更多信息。

如果您请求的版本在注册表中不可用,就会发生这种情况。

对于 @my-package@^1.2.0,您请求的版本介于 >=1.2.0 和 <2.0.0 之间。难不成这个registry上只有比1.2.0旧或者比2.0.0新的版本? Npm 将安装它获得的任何内容,并且不会在此处引发错误。

您可以通过查看 node_modules/my-package/package.json.

来检查您在 npm 安装中获得的版本

如果在执行本地 npm install 时没有发生这种情况,请检查亚马逊使用的 npm 注册表是否包含您的 my-package 包。

您可以尝试将官方 npm 注册中心添加到您的 Beanstalk 项目中,以检查是否是 Amazon npm 注册中心没有包含您的包。请参阅 How to use a private npm registry on Elastic Beanstalk? 如何执行此操作。

  • 这似乎是一个包-lock.json问题。 如本

如果你没有在你的 repo 中推送 package-lock.json,它将在 运行 npm install 时生成。所以最好在 repo 中添加 package-lock.json 以避免本地机器和部署机器上的 package-lock.json 文件不一致。

能否请您尝试将新的包 -lock.json 文件推送到存储库并尝试?

您是否尝试删除包-lock.json?

尝试删除 npm 和 npm-cache 文件夹

然后

重新运行 npm 安装

这似乎是 npm 服务器的缓存问题。我们已经从 npm 切换到 GitHub 包,那里一切正常。

不完全是你的情况,但对于那些 运行 进入 "integrity checksum failed" 错误的人来说,以下可能会有所帮助。但首先要确保你了解发生了什么。 npm 告诉您来自 https://registry.npm.org 的校验和与来自 package-lock.json 的校验和不匹配。它要么在注册表中更改,要么...

考虑输出中的一行:

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中的包,并将第三个(sha512-nH...ow==)放入其"integrity"字段中。

更多内容here

主要是关注npm registery,一些home npm registery已经更新到另一个url。

您可以运行下面的命令查看npm registery

npm config get registry

应该设置吧

https://registry.npmjs.org/

如果不是,则 运行 下面的命令

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

它将设置 npm registery。现在您可以再试一次

npm i

它会成功安装包。

就我而言,正如 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

似乎不​​同版本对同一个包的sha计算不同。这就是为什么删除 package-lock.json 文件可以在这种特定情况下起作用的原因 - 至少有一段时间,直到具有不同版本的计算机再次尝试构建项目。