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

问答 duke-lee ⋅ 于 3年前 ⋅ 最后回复由 JeffLi 2天前 ⋅ 7296 阅读

说明

默认安装的 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 命令后, 按照文件里面指定的版本去下载代码依赖包;

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

附言 0  ·  1年前

Thanks @overture

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

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

  • 工具类 (Library), 用于别人依赖使用的,不建议把 composer.lock 加入版本控制,因为很容易与其它包的依赖版本造成冲突。
回复数量: 6
  • thbourlove 1
    3年前

    composer官方文档中其实说的很明白。一般的web项目是不会作为一个lib被其它项目所依赖的,所以把composer.lock加到版本管理中是利大于弊的。

    至于laravel库中为什么会放到.gitignore中,也很容易理解。如果他不ignore掉,每个pull request必然都会带有对composer.lock的修改,对作者来说是几乎无法维护的。

  • Rabbit52
    3年前

    平时自己的项目直接把 vendor 目录都加入了~ packagist 好慢~

  • monkey 最重要的事,永远只有一件 1
    3年前

    我也是每个项目都要把 composer.lock 放到 cvs 里面, 吃过亏的人都会这么做。

  • overtrue MOD https://github.com/overtrue 1
    1年前

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

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

    上一条回复里第二条有误,在 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.

  • JeffLi 努力奋斗的程序员
    2天前

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

暂无评论~~

  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!