在更新我的NPM到最新版本(从3。X到5.2.0),在一个现有的项目上运行npm install,我得到一个自动创建的包锁。json文件。

我能看出来是包锁。Json给了我一个确切的依赖树,而不是package.json。

单从这个信息来看,就像是包裹。Json是多余的,不再需要了。

这两个都是NPM工作所必需的吗? 只使用包锁安全吗?json文件吗?

关于包锁的文档。Json (doc1, doc2)没有提到这一点。

编辑:

经过一番思考,我得出的结论是,如果有人想用旧版本的NPM (5.x之前)来使用你的项目,它仍然会安装所有的依赖项,但会使用不那么精确的版本(补丁版本)。


当前回答

package-lock。Json:记录每个安装包的确切版本,允许您重新安装它们。以后的安装将能够构建相同的依赖树。

包中。Json:记录应用程序所需的最低版本。如果您更新了特定包的版本,则更改不会反映在这里。

其他回答

如果你的问题是锁文件是否应该提交到你的源代码控制-它应该。在某些情况下,它会被忽略。

我发现它膨胀的拉请求和提交历史,所以如果你看到它的变化,做一个单独的提交。

你需要两个包锁吗?Json和package.json?不。

你需要package.json吗?是的。

你能有一个只有package-lock.json的项目吗?不。

包。Json不仅仅用于依赖关系,比如定义项目属性、描述、作者和许可信息、脚本等。package-lock。Json仅用于锁定对特定版本号的依赖关系。

package-lock。Json:记录每个安装包的确切版本,允许您重新安装它们。以后的安装将能够构建相同的依赖树。

包中。Json:记录应用程序所需的最低版本。如果您更新了特定包的版本,则更改不会反映在这里。