关于 Laravel 项目下 composer.lock 文件是否需要版本控制器的讨论

说明

默认安装的 Laravel 会把 composer.lock 放在 .gitignore 文件中, 不加入 git 的版本跟踪, 我倒是偏向于去除掉此行, 也就是把 composer.lock 加入版本控制., 下面说下我的理由:

什么是 composer.lock 文件?

composer.lock 文件是当你第一次使用 composer install 或者 执行 composer update 后生成的文件, 此文件里定义了当前项目的代码依赖, 还有最重要的, 这些代码依赖的对应的版本.

composer.lock 文件作用是什么?

默认情况下, 当执行 composer install 的时候, Composer 会检查当前项目是否有 composer.lock 文件, 如果有的话, 就会按照此文件去下载代码依赖和其指定的版本.

好处

composer.lock 文件加版本的好处有以下:

  • 团队开发的时, clone 下代码后, 使用 composer install 可以确保大家使用的依赖包都是同一个版本的, 避免没必要的混乱;
  • 在一个现有的项目上开发的时候, 执行 composer update 后, 偶尔会发现刚刚更新了某个代码包把程序整挂了, 这个时候, 如果 composer.lock 是加入版本控制器的话, 直接一个 git diff 命令, 就可以查看到这次更新了那个包, 快速定位到问题的所在;
  • 在线上部署的时候, 可以确保线上生成环境下使用所有代码是和开发时候使用的一致, 因为 composer.lock 会确保你在执行 composer install 命令后, 按照文件里面指定的版本去下载代码依赖包;

想听听大家是怎么看待这个问题的?

附言 1  ·  7年前

Thanks @overture

其实个人的理解是这样的:

  • 应用 (Project), 就是说是独立项目而不被其它项目依赖的,是推荐把 composer.lock 文件加入版本控制的,保证开发人员安装后的环境是一样的。

  • 工具类 (Library), 用于别人依赖使用的,不建议把 composer.lock 加入版本控制,因为很容易与其它包的依赖版本造成冲突。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 5

其实个人的理解是这样的:

  1. 应用(project), 就是说是独立项目而不被其它项目依赖的,是推荐把 composer.lock 文件加入版本控制的,保证开发人员安装后的环境是一样的。
  2. 工具类(library), 用于别人依赖使用的,不建议把 composer.lock 加入版本控制,因为很容易与其它包的依赖版本造成冲突。
7年前 评论

上一条回复里第二条有误,在 library 里放 composer.lock 不会造成冲突,但是 composer 并不去读它,也就是说没什么用。放不放对于依赖者都没影响,官方说明:

For your library you may commit the composer.lock file if you want to. This can help your team to always test against the same dependency versions. However, this lock file will not have any effect on other projects that depend on it. It only has an effect on the main project.

7年前 评论
你看我吊吗啊

当然需要。。实践一下就知道了。

5年前 评论
guanhui07

我认为也是需要的,本地和开发 环境确保 安装包版本一致,环境一致. so 用docker镜像的好处就完全体现

4年前 评论
Epona

我认为,将composer.json文件里的package指定好版本就可以了,composer.lock加入版本控制造成的冲突会很多。

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!