Node 应用程序中 package.json 与 package-lock.json 的信息和变更管理

Information and change management of package.json vs package-lock.json in Node apps

请注意:这里有许多类似的问题,但我相信我确实在问一个新的+独特的问题。


我是 Node 和 JavaScript 的新手,我正在尝试了解 package.jsonpackage-lock.json 的不同用途。 在你进一步阅读之前没有,我不只是要求总结一下它们之间的区别。

经过一番功课,我对它们的理解如下:

这些说法正确吗?如果不是,有人可以提供一些细节 how/where 我的理解有误吗?

小回答

你的理解是正确的。

对于 运行 一个基本的 Nodejs 项目,您只需要 package.json 项目文件,我的意思是它是必需的。

package.json用于保存项目的依赖。它还定义了项目属性,如描述、作者、许可信息、脚本等。

package-lock.json用于将依赖项保持在特定的版本号中。它记录了每个已安装包的确切版本,允许您在不同环境中安装相同版本的包。

简单回答

为什么要创建package-lock.json

当您使用以下命令在项目中安装包时。例如

npm install node-sass --save

,它将在您的项目中安装该包的最新版本,并将依赖项保存在带有克拉 (^) 符号的 package.json 中。

"node-sass": "^6.0.0"

Carat (^) 表示它将支持主版本的任何更高版本。此处,创建 package-lock.json 以将依赖项与已安装的版本锁定,在本例中为 6.

package-lock.json有什么用?

如上所述,它记录了每个已安装包的确切版本,允许您重新安装它们。这允许您在不同的环境中生成相同的结果。为此,我们应该使用 package-lock.json 文件来安装依赖项。

为什么我们要提交 package-lock.json 我们的项目源代码(到 Git)?

在部署期间,当您 运行 npm i(或 npm install)在您的服务器或任何具有相同 package.json 文件但没有 package-lock.json 的环境中时,安装的软件包现在可能比您预期的版本更高。在这种情况下,如果您的代码针对其中某些软件包的特定版本,您可能会遇到问题。

参考资料

https://docs.npmjs.com/cli/v7/configuring-npm/package-lock-json