233

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

我可以告诉package-lock.json我一个确切的依赖树而不是package.json.

仅从这些信息来看,它似乎package.json是多余的,不再需要了。

它们都是 NPM 工作所必需的吗? 仅使用该文件
是否安全或可能?package-lock.json

package-lock.json (doc1doc2)上的文档没有提及任何相关内容。

编辑

经过一番思考后,我得出的结论是,如果有人想将您的项目与旧版本的 NPM(5.x 之前)一起使用,它仍然会安装所有依赖项,但版本不太准确(补丁版本)

4

5 回答 5

215

你需要两个package-lock.jsonpackage.json吗?没有

你需要package.json吗?的。

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

package.json不仅仅用于依赖项——比如定义项目属性、描述、作者和许可信息、脚本等。仅package-lock.json用于将依赖项锁定到特定版本号。

于 2018-12-02T08:32:04.110 回答
67

package-lock.json:记录每个已安装软件包的确切版本,以便您重新安装它们。未来的安装将能够构建一个相同的依赖树。

package.json:记录您的应用所需的最低版本。如果您更新特定软件包的版本,则更改不会在此处反映出来。

于 2019-06-20T09:42:09.140 回答
12

如果您的问题是是否应该将锁定文件提交给您的源代码管理 - 它应该。在某些情况下会被忽略。

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

于 2017-07-23T05:56:33.640 回答
8
 Package.json vs Package.lock.json

在此处输入图像描述

在此处输入图像描述

于 2021-06-26T17:27:21.473 回答
5

关于保留 package-lock.json 背后原因的更准确和详细的解释可以在这里找到

于 2020-05-13T14:09:55.403 回答