为啥我必须运行两次“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”告诉我“没有安装你必须自己安装对等依赖项:”?

为啥我必须单击两次才能在 Label MouseDown 事件中执行方法

为啥/何时我必须点击两次才能触发 iOS 上的点击

为啥我必须执行两次按钮功能才能使我的逻辑正常工作?

强制在纱线之前运行 npm install ?