[英]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 ,它将在运行 npm 安装时生成。 所以最好在 repo 中添加 package-lock.json 以避免本地机器和部署机器之间的 package-lock.json 文件不一致。
您能否尝试将新的 package-lock.json 文件推送到 repo 并尝试?
您是否尝试过修改my-package
的版本,然后直接指定确切的版本而不是范围?
作为一种解决方法,请按照以下步骤操作:
如果按照上述步骤操作后问题仍然存在,请使用 --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
应该设置它
如果不是,则在命令下方运行
npm config set registry https://registry.npmjs.org/
它将设置 npm 寄存器。 现在你可以再试一次
npm i
它将成功安装 package。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.