为什么`npm install`为同一个`package.json`文件生成不同的`package-lock.json`文件?

时间:2018-06-11 14:17:52

标签: node.js npm npm-install package.json package-lock.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" } 文件的相关部分:

npm install

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

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

怎么会这样?

这是一条可能的线索:

如果我事先删除npm install文件,则npm install将中止并显示错误。

因此,我的问题的答案可能与package-lock.json依赖于已存在的package-lock.json文件的事实有关。

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

现在我已将其中一个存储库中的package-lock.json文件更改为与另一个存储库相同,我希望相应的function(datamap) { d3.select('.datamap').call( d3 .zoom() .scaleExtent([0.7, 6]) .on('zoom', function() { datamap.svg.selectAll('g').attr('transform', d3.event.transform); }) ); } 文件也会相同。

1 个答案:

答案 0 :(得分:1)

来自official documentation

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

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

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

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