Php 供应商文件夹是否应在源代码管理中?

Php 供应商文件夹是否应在源代码管理中?,php,composer-php,Php,Composer Php,例如,像 /vendor/composer/classLoader.php /vendor/composer/autoload_classmap.php 在我参与的一个项目中,这些都是签入的。我不确定这是否是一个好的做法,因为我记得读过Laravel建议将/vendor放在中。gitignore不,应该排除vendor目录,永远不要手动触摸。当您安装依赖项时,composer更新/composer安装将生成类加载器。否,您的供应商文件夹不是源代码的一部分,不应该是 签入您的git存储库 一个好

例如,像

/vendor/composer/classLoader.php
/vendor/composer/autoload_classmap.php

在我参与的一个项目中,这些都是签入的。我不确定这是否是一个好的做法,因为我记得读过Laravel建议将
/vendor
放在
中。gitignore

不,应该排除
vendor
目录,永远不要手动触摸。当您安装依赖项时,
composer更新
/
composer安装
将生成类加载器。

,您的供应商文件夹不是源代码的一部分,不应该是 签入您的git存储库

一个好的工作流程应该是:

  • 签入composer.json
  • 每当您要升级依赖项时:
    • 在本地存储库上运行
      composer update
    • 签入已更改的
      composer.lock
    • 在生产存储库上部署并运行
      composer安装
为什么还要签入composer.lock: 您的
composer.json
定义了运行
composer update
时将使用的依赖项的可接受版本


仅使用
composer.json
时出现的问题是要有可复制的构建(例如,在所有环境中,依赖项的版本完全相同)。这就是为什么在运行composer安装时,如果存在
composer.lock
文件,composer将加载与composer.lock文件中写入的依赖项完全相同的依赖项。每当运行
composer update

时,您的
composer.lock
文件都会更新,您希望在源代码管理中保留的是composer.json文件,而不是composer根据composer.jsonBig+1加载的文件,以了解composer.lock的详细信息。