【问题标题】:EINTEGRITY: npm 5.0 integrity check and modernizr.com dependencyEINTEGRITY:npm 5.0 完整性检查和modernizr.com 依赖
【发布时间】:2017-11-25 17:09:27
【问题描述】:

我在安装我的包的 deps 时遇到了这个错误:

$ npm i
npm ERR! code EINTEGRITY
npm ERR! sha1-tU7jWojzuU8MIY2VLAx+BwluNo0= integrity checksum failed when using sha1: wanted sha1-tU7jWojzuU8MIY2VLAx+BwluNo0= but got sha1-oXYP0kzpbhku0KU+phy353lbBhQ=. (26624 bytes)

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/tlenex/.npm/_logs/2017-06-22T10_18_19_773Z-debug.log

问题在于我的 Modernizr 依赖项:

"dependencies": {
  "Modernizr": "https://modernizr.com/download?setclasses-flash"
}

有没有办法解决这个问题或忽略这个完整性检查?

目前我必须运行

npm i https://modernizr.com/download?setclasses-flash

再次让事情正常进行,它会覆盖我的package-lock.json"Modernizr""integrity" 字段。 每次从该链接获取的 Modernizr 包发生更改并且我的包依赖项需要重新安装(例如,每次在 CI 构建时)时,都可能发生这种情况

如果没有其他方法可以解决这个问题?我希望我不必将package-lock.json 放在我的.gitignore 文件中:(

关于我的环境的更多数据:

$ npm -v
5.0.3
$ node -v
v6.11.0

【问题讨论】:

标签: node.js npm npm-install modernizr


【解决方案1】:

编辑 package-lock.json ,在这种情况下找到你想要跳过的那个失败的那个

sha1-tU7jWojzuU8MIY2VLAx+BwluNo0

并从中删除完整性参数,即

},
"range-parser": {
  "version": "1.2.0",
  "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
  "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
  "dev": true
},

到...

},
"range-parser": {
  "version": "1.2.0",
  "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
  "dev": true
},

运行 npm install 后,将检查其余部分,跳过此完整性

【讨论】:

    【解决方案2】:
    • $ rm -rf package-lock.json node_modules
    • $ npm install --cache /tmp/empty-npm-cache

    如果这样可以解决问题,请清除您的全局 npm 缓存以修复损坏。

    【讨论】:

    • 当这个问题在团队中超过 20 名开发人员和大量 CI 构建时,这不是一个好的解决方案。它严格连接到modernizr.com/download?setclasses-flash 依赖链接,它总是导致包的最新版本,然后使用来自包锁的校验和创建EINTEGRITY 错误。
    【解决方案3】:

    我终于解决了这个问题。

    我们的团队摆脱了没有 SEMVER 表示法的 URL 依赖,在本例中为 https://modernizr.com/download?setclasses-flash,并使用 modernizr-loaderwebpack。在 npm 上还有 gulpgrunt 工具的等价物,选择并使用您最喜欢的一个。

    在使用它们之后,我们终于摆脱了返回 EINTEGRITY npm 错误,而无需 nuking package-lock.jsonnode_modules

    【讨论】:

      【解决方案4】:

      我遇到了同样的错误,我通过以下方式解决了它:

      1. 删除 package-lock.json
      2. 运行“npm install”

      【讨论】:

      • 当团队中有 20 多名开发人员和大量 CI 构建时,这不是一个好的解决方案。
      【解决方案5】:

      只需为解决方案做两件事

      第一: npm 缓存清理 --force

      第二: npm i -g npm

      然后安装你想要的

      【讨论】:

      • 当团队中有 20 多名开发人员和大量 CI 构建时,这不是一个好的解决方案。
      【解决方案6】:
      1. 查找所有过时的包并更新主题:

        npm outdated -g sudo npm i -g outDatedPKG

      2. 将 npm 升级到最新版本:

        sudo npm i -g npm

      3. 删除package-lock.json文件。

      4. 删除 ~/.npm 中的_cacache 目录:

        npm cache verify

        4.1。每次出现该错误时,请执行第 2 步和第 3 步。

      5. 如果仍然出现错误,请清除 npm 的缓存:

        npm cache clean --force

      【讨论】:

      • 当团队中有 20 多名开发人员和大量 CI 构建时,这不是一个好的解决方案。
      【解决方案7】:

      完整性字段的目的是在发生更改时提醒您,因此如果您不希望它存在,您可以禁用 npmrc 中的 package-lock.json 文件。只需设置package-lock=false

      注意:我是 Modernizr 的开发人员,并与 npm-cli 团队讨论过这个问题。根本原因似乎是 npm5 和更早版本之间的 SHA 类型发生了变化。核对node_modules 文件夹将修复它

      【讨论】:

      • 重点是,我不想为其他包和依赖项禁用它。所以现在核对node_modules 是目前唯一的选择。完美的解决方案是只对一个链接、域名或包名禁用包锁定 SHA 检查。
      • 我也可以移动到 npm 的存储库“modernizr”包,创建自己的构建器并保留此问题未解决。但目前我没有时间这样做。
      猜你喜欢
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 2016-11-09
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 2011-06-09
      • 2021-10-31
      相关资源
      最近更新 更多