将 package-lock.json 配置为依赖项真相的来源
Configuring package-lock.json to be source of dependency truth
我有与 Do I need both package-lock.json and package.json? 完全相同的问题(tldr;“package.json
和 package-lock.json
之间有什么区别?”)和在那里找到了一些非常好的答案。然而,它给我留下了一些其他非常相似的相关问题,我在其他地方看不到这些问题的答案。
例如,如果package.json
和package-lock.json
相互冲突怎么办?说 package.json
说要使用 some-lib-2.*
(some-lib
的任何 2.x 版本)但是 package-lock.json
被配置为使用 some-lib-1.18.4
?有错误吗?是否优先选择任一文件作为“依赖性真相的来源”?
我喜欢用一个文件来管理我的特定依赖项的想法,所以我觉得我倾向于:
- 根本没有在
package.json
中指定库或版本;和
- 使用
package-lock.json
指定每个项目的确切版本 module/library 我的项目使用
这可以吗?如果是这样,我需要进行任何特殊配置吗?我是在版本控制中跟踪这两个文件,还是有什么理由让我 不想 想要在 git/VCS 中跟踪这些文件?
- 您使用命令行 (
npm install [optional args]
) 更新两个文件
- NPM —— 和你的命令行调用 —— 决定模块的依赖版本的可接受范围,并在
package.json
中定义这些范围。然后它会在该范围内选择一个版本——将其用于 buildtime/runtime——并将该确切版本写入 package-lock.json
- 所以您想将这两个文件都放在版本控制中,这样您就有了可重复的构建,并且检查您的项目的任何开发人员都将能够立即构建具有相同依赖项的相同版本的项目
- 并且您唯一一次直接编辑
package.json
是在您不想为特定依赖项允许一系列版本并且想要挑选要使用的确切版本时。您进行编辑、保存,您 运行 npm install [options]
和 package-lock.json
也将更新为使用该版本
就其价值而言,这非常令人困惑,并且提倡 而不是 的 anti-pattern 来管理您的依赖项。它允许开发人员认为只引入给定依赖项的最新版本是可以的,即使该版本在构建之间发生变化。这会导致您的应用程序中出现错误,non-repeatable 构建和各种令人头疼的问题。
我强烈建议始终为所有直接依赖项指定所需的确切版本:请不要再使用范围或通配符。
我有与 Do I need both package-lock.json and package.json? 完全相同的问题(tldr;“package.json
和 package-lock.json
之间有什么区别?”)和在那里找到了一些非常好的答案。然而,它给我留下了一些其他非常相似的相关问题,我在其他地方看不到这些问题的答案。
例如,如果package.json
和package-lock.json
相互冲突怎么办?说 package.json
说要使用 some-lib-2.*
(some-lib
的任何 2.x 版本)但是 package-lock.json
被配置为使用 some-lib-1.18.4
?有错误吗?是否优先选择任一文件作为“依赖性真相的来源”?
我喜欢用一个文件来管理我的特定依赖项的想法,所以我觉得我倾向于:
- 根本没有在
package.json
中指定库或版本;和 - 使用
package-lock.json
指定每个项目的确切版本 module/library 我的项目使用
这可以吗?如果是这样,我需要进行任何特殊配置吗?我是在版本控制中跟踪这两个文件,还是有什么理由让我 不想 想要在 git/VCS 中跟踪这些文件?
- 您使用命令行 (
npm install [optional args]
) 更新两个文件 - NPM —— 和你的命令行调用 —— 决定模块的依赖版本的可接受范围,并在
package.json
中定义这些范围。然后它会在该范围内选择一个版本——将其用于 buildtime/runtime——并将该确切版本写入package-lock.json
- 所以您想将这两个文件都放在版本控制中,这样您就有了可重复的构建,并且检查您的项目的任何开发人员都将能够立即构建具有相同依赖项的相同版本的项目
- 并且您唯一一次直接编辑
package.json
是在您不想为特定依赖项允许一系列版本并且想要挑选要使用的确切版本时。您进行编辑、保存,您 运行npm install [options]
和package-lock.json
也将更新为使用该版本
就其价值而言,这非常令人困惑,并且提倡 而不是 的 anti-pattern 来管理您的依赖项。它允许开发人员认为只引入给定依赖项的最新版本是可以的,即使该版本在构建之间发生变化。这会导致您的应用程序中出现错误,non-repeatable 构建和各种令人头疼的问题。
我强烈建议始终为所有直接依赖项指定所需的确切版本:请不要再使用范围或通配符。