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

Posted

技术标签:

【中文标题】使用 Git 管理 package.json 和 package-lock.json【英文标题】:Managing package.json & package-lock.json with Git 【发布时间】:2019-09-05 18:52:10 【问题描述】:

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

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

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

如果没有,克隆 repo 的新团队成员将获得锁定文件,但无法从锁定文件生成 package.json 文件,对吗?

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

【问题讨论】:

package.json 是必需的 - 如果您希望添加一个包,则需要使用 package.json - 更不用说它包含对所用包进行人类可读分析的中心位置和项目属性(命令、项目位置等) 更不用说,你不能有一个只有 package.json 的项目 - npm 不知道为新开发人员安装后要做什么 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

回答你的额外问题:

有一种方法可以教 Git 自动“合并”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 以获得更详细的说明。

【讨论】:

以上是关于使用 Git 管理 package.json 和 package-lock.json的主要内容,如果未能解决你的问题,请参考以下文章

带有 GIT 工作流的 Package.json - 开发和主分支的独立依赖项

在 VSTS 中使用 git tag 或 package.json 版本作为 Release 名称

webpack 打包完成后 自动 提交git问题

package-lock.json

npm 错误!尝试安装 package.json 时 git dep 准备失败

package.json 中带有版本的私有 bitbucket 存储库