为啥我必须运行两次“npm install”才能成功安装我的包
Posted
技术标签:
【中文标题】为啥我必须运行两次“npm install”才能成功安装我的包【英文标题】:Why must I run "npm install" twice for my package to install successfully为什么我必须运行两次“npm install”才能成功安装我的包 【发布时间】:2019-05-20 01:46:39 【问题描述】:我第一次“npm install”package_1 时,出现以下错误。
npm ERR! path C:\Users\john_\Documents\GitHub\why_npm_nesting_fails\package_1\node_modules\.staging\bignumber.js-55edd243
我不使用“bignumber”,所以假设它是 mysql 依赖项。我第二次“npm install”package_1,它通过了。
added 2 packages and audited 30 packages in 0.722s
这与 MySQL 有关,因为在删除此依赖项后,第一次一切正常。
这是一个依赖关系图:
可以在以下位置找到精简后的项目 https://github.com/johngrabner/why_npm_nesting_fails 只有 4 个 package.json 文件,每个文件有 7 行,包括 说明了这个问题。即:4 个文件,每个文件 1 行,演示了这个问题。
由于第一次“npm install”失败,这个问题阻止了我将我的项目干净地放入 docker 容器中。一种解决方法 安装“package_4”,然后安装“package_3”等等,但有效 我担心我不理解会回来咬我的东西。
Windows 和 Docker Node:9.4 都会出现上述问题。
【问题讨论】:
npm -v = 6.5.0。节点-v = 8.9.4。在 Windows 电脑上。使用“FROM node:9.4”的 docker 出现同样的错误。 非常奇怪的观察:如果我保留前一个双“npm install”的 package-lock.json,那么“npm install”第一次工作。此外,如果保留 package-lock.json,则在 package_1 文件夹中只创建一个“node_modules”,而在每个 package_n 中创建 4 个 node_modules。 什么版本的 MySQL? 如果保留您的package-lock.json
可以解决问题,您是否考虑过提交您的package.json
?当package-lock.json
存在时,npm install
应该在查看您的package.json
之前引用它。 docs.npmjs.com/cli/install#description package-lock.json
描述了 npm install
从头开始完成时发生的最终元数据解析。
Myswl 版本 2.15.0
【参考方案1】:
您绝对应该始终保留您的package-lock.json
。
下面是对该文件的详细描述以及它为何如此有用:package-lock.json -- A manifestation of the manifest
重点是:
描述依赖关系树的单一表示,以保证团队成员、部署和持续集成安装完全相同的依赖关系
和
通过允许 npm 跳过以前安装的包的重复元数据解析来优化安装过程
删除此文件会(有点)混淆 NPM。
保留package-lock.json
文件更容易,然后处理如果不这样做会出现的所有问题:)
package-lock.json
“此文件旨在提交到源存储库”
(https://docs.npmjs.com/files/package-lock.json)
【讨论】:
只有***项目应该有锁文件提交,而不是包。无论如何,真正的谜团是导致失败的原因,而不是如何解决。在不了解潜在故障原因的情况下,它可能会在未来显露出来。以上是关于为啥我必须运行两次“npm install”才能成功安装我的包的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的word excel 一次打不开,必须两次才能打开,在“打开”中选择文件可以打开。
为啥“npm install”告诉我“没有安装你必须自己安装对等依赖项:”?