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

问答 duke-lee ⋅ 于 3年前 ⋅ 最后回复由 JeffLi 1个月前 ⋅ 8097 阅读

说明

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

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

本文章首发在 Laravel China 社区
附言 0  ·  1年前

Thanks @overture

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

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

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

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

    1. 应用(project), 就是说是独立项目而不被其它项目依赖的,是推荐把 composer.lock 文件加入版本控制的,保证开发人员安装后的环境是一样的。
    2. 工具类(library), 用于别人依赖使用的,不建议把 composer.lock 加入版本控制,因为很容易与其它包的依赖版本造成冲突。
  • overtrue MOD https://github.com/overtrue 1
    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 麻烦报错先将关键信息进行百度、google,找不到原因或者找到原因没有解决...
    2个月前

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

暂无评论~~
您需要登陆以后才能留下评论!

Composer 中国全量镜像

Top 100 扩展包

Lumen 中文文档

Laravel 速查表

Laravel 中文文档

Laravel 项目开发规范

Laravel 开发环境部署

Elasticsearch-PHP 中文文档

Lumen 中文文档

GraphQL PHP 中文文档

社区文档撰写指南

TDD 构建 Laravel 论坛笔记

PHP PSR 标准规范

PHP 设计模式全集

Dingo API 中文文档