繁体   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