Node 应用程序中 package.json 与 package-lock.json 的信息和变更管理
Information and change management of package.json vs package-lock.json in Node apps
请注意:这里有许多类似的问题,但我相信我确实在问一个新的+独特的问题。
我是 Node 和 JavaScript 的新手,我正在尝试了解 package.json
和 package-lock.json
的不同用途。 在你进一步阅读之前,没有,我不只是要求总结一下它们之间的区别。
经过一番功课,我对它们的理解如下:
- 您想将两者提交给源代码管理,因此
.gitignore
中都不应该提及
package.json
描述了你的项目,可以做一些轻量级的依赖管理,例如,指定你想要最新版本的 fizzbuzz
包,或者你想要最新的 3.10.x
fizzbuzz
包的版本
package-lock.json
纯粹用于依赖管理,并详细说明您的项目应该使用哪些 specific 依赖;例如,如果您指定要在 package.json
文件中使用最新 3.10.x
版本的 fizzbuzz
,则 package-lock.json
文件可能会指定 fizzbuzz-3.10.24
,等等
- 你 直接 modify/edit 做 你的
package.json
文件,但你只让 NPM 和其他命令行工具修改你的 package-lock.json
(因此,任何人都不应该编辑 package-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
请注意:这里有许多类似的问题,但我相信我确实在问一个新的+独特的问题。
我是 Node 和 JavaScript 的新手,我正在尝试了解 package.json
和 package-lock.json
的不同用途。 在你进一步阅读之前,没有,我不只是要求总结一下它们之间的区别。
经过一番功课,我对它们的理解如下:
- 您想将两者提交给源代码管理,因此
.gitignore
中都不应该提及
package.json
描述了你的项目,可以做一些轻量级的依赖管理,例如,指定你想要最新版本的fizzbuzz
包,或者你想要最新的3.10.x
fizzbuzz
包的版本package-lock.json
纯粹用于依赖管理,并详细说明您的项目应该使用哪些 specific 依赖;例如,如果您指定要在package.json
文件中使用最新3.10.x
版本的fizzbuzz
,则package-lock.json
文件可能会指定fizzbuzz-3.10.24
,等等- 你 直接 modify/edit 做 你的
package.json
文件,但你只让 NPM 和其他命令行工具修改你的package-lock.json
(因此,任何人都不应该编辑package-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