为什么我必须运行"npm install"两次才能成功安装我的包

gra*_*bag 14 mysql npm npm-install

我第一次"npm install"package_1,我收到以下错误.

npm ERR! path C:\Users\john_\Documents\GitHub\why_npm_nesting_fails\package_1\node_modules\.staging\bignumber.js-55edd243
Run Code Online (Sandbox Code Playgroud)

我不使用"bignumber",所以假设它是一个mysql依赖.第二次我"npm install"package_1,它通过了.

added 2 packages and audited 30 packages in 0.722s
Run Code Online (Sandbox Code Playgroud)

它与mysql有关,因为在删除此依赖项之后,一切都在第一次运行.

以下是依赖关系图:

在此输入图像描述

精简项目可以在https://github.com/johngrabner/why_npm_nesting_fails找到, 只有4个package.json文件,每个包含7行,包括{}演示了这个问题.即:4个文件,每行1行,演示此问题.

由于第一次"npm安装"失败,这个问题阻止我将我的项目干净地放入docker容器.安装"package_4",然后安装"package_3"等等的解决方法有效,但我担心我不理解会回来咬我的东西.

Windows和Docker节点上都会出现上述问题:9.4.

Mar*_*ndt 0

您绝对应该始终保留您的package-lock.json.

以下是对该文件的详细描述以及它为何如此有用:package-lock.json - 清单的表现形式

重点是:

  • 描述依赖关系树的单一表示,以便保证团队成员、部署和持续集成安装完全相同的依赖关系

  • 通过允许 npm 跳过先前安装的软件包的重复元数据解析来优化安装过程

通过删除这个文件,你将会(有点)迷惑 NPM。

保留package-lock.json文件会更容易,然后处理如果不保留文件就会出现的所有问题:)


包锁.json

“此文件旨在提交到源存储库中”

https://docs.npmjs.com/files/package-lock.json