使用 Git 管理 package.json 和包-lock.json

Managing package.json & package-lock.json with Git

我知道您应该将 package-lock.json 添加到您的 git 存储库以确保团队成员使用相同版本的依赖项。

运行 npm install 将检查 package-lock.json 并安装那里指示的版本。如果不存在锁定文件,它将从 package.json 指示的来源安装包。

package.json 也应该添加到您的 git 存储库中吗?

如果不是,克隆回购协议的新团队成员将获得锁定文件,但无法从锁定文件生成 package.json 文件,对吗?

奖金问题: 如何处理 package-lock.json 中的合并冲突?由于它们是机器生成的,我发现这种情况经常发生,而且并不总是很清楚应该如何解决它们。

是的,package.json 也应该包括在内。 除了包含项目元数据并被 npm 所要求外,它还提供了一个清晰简洁的显式依赖关系视图

关于冲突,最好的选择可能是完全使用其中一个(而不是试图合并)。或者只是从头开始重新创建它。 在添加所有主要依赖项的项目的早期阶段,您可能会遇到很多冲突。

回答您的奖励问题:

有一种方法可以教 Git 自动 'merge' package-lock.json 文件,使用合并驱动程序和 .gitattributes 文件。

TL;DR

运行 在每台开发人员机器上执行一次:

git config --global merge.theirs.name "Keep changes of upstream branch"
git config --global merge.theirs.driver "cp -f '%B' '%A'"

将以下 .gitattributes 文件添加到您的存储库(并提交):

package-lock.json merge=theirs

有关更详细的说明,请参阅 my blog post