使用 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 名称