5

这是我package.json文件的相关部分:

  "devDependencies": {
    "ajv": "^6.0.0",
    "webpack": "^4.0.0",
    "websocket": "^1.0.0",
    "bignumber.js": "^7.0.0",
    "decimal.js": "^10.0.0",
    "truffle": "4.1.11",
    "ganache-cli": "6.1.0",
    "solidity-coverage": "0.5.4",
    "ethereumjs-testrpc-sc": "6.1.2",
    "web3": "1.0.0-beta.34"
  }

我在同一台 PC 上的两个不同的存储库中有这个文件。

当我同时npm install在这些存储库中的每一个中运行时,我会package-lock.json在每个存储库中得到一个不同的文件。

这怎么可能?

这是一个可能的线索:

package-lock.json如果我事先删除了文件,则会npm install中止并出现错误。

npm install所以我的问题的答案可能与依赖于现有package-lock.json文件的事实有关。

最初,我package-lock.json在这些存储库中有不同的文件,因为相应的package.json文件不同。

现在我已经将package.json其中一个存储库中的文件更改为与另一个相同,我希望相应的package-lock.json文件也将变得相同。

4

1 回答 1

4

来自https://docs.npmjs.com/files/package-locks

“从概念上讲,npm-install 的“输入”是一个 package.json,而它的“输出”是一个完整的 node_modules 树:您声明的依赖项的表示。在理想的世界中,npm 会像一个纯函数一样工作: 相同的 package.json 应该在任何时候生成完全相同的 node_modules 树。在某些情况下,确实如此。但在许多其他情况下,npm 无法做到这一点。这有多种原因:

  • 可能使用了不同版本的 npm(或其他包管理器)来安装包,每个包使用的安装算法略有不同。”

package-lock 文件将确保不会因软件包版本略有不同而中断,在同一台机器上同时运行 npm install 并不能保证获得所有依赖项的相同版本。

另一点可以阐明包文件与包锁定文件的不同之处。两个相同的 package.json 文件不保证相同的 node_modules 文件夹结构。但是两个相同的包锁定文件将保证完全相同的 node_modules 文件结构。

于 2018-06-11T14:25:44.293 回答