您是否必须在localhost和生产中运行Composer?

时间:2014-02-28 19:24:54

标签: php git composer-php

我是Composer(getcomposer.org)的新手,如果我使用Composer在本地安装软件包,然后使用Git将我的代码库推送到生产服务器,我不确定它是如何工作的。我是否必须在生产服务器上再次运行Composer?

欢呼声, Ĵ

2 个答案:

答案 0 :(得分:7)

设置项目时,将依赖项添加到本地项目目录中的composer.json文件中。

完成此操作后,您将需要运行composer update。您也可以运行composer install,但是,如果没有composer.lock文件,composer install实际上会运行composer update。

Composer更新将解析您正在使用的所有库的所有依赖项,将它们下载到/ vendor目录,创建自动加载器脚本并生成composer.lock文件。

对于您的项目,您要做的是使用composer.json和您的composer.lock文件的版本。

在生产服务器上,您将始终运行composer install,这可确保生产服务器上的库与您在开发过程中使用的库完全相同。

composer install也快得多,因为它不必完成所有依赖项管理工作,并且几乎总是可以只提取特定的提交#。它不必查看版本字符串。因此,一旦服务器已经通过它,通常会非常快。

在开发中,唯一一次应该运行composer update,就是当你引入一个新库时,或者你有一个问题,即底层库已被更改,你知道你需要让composer出去并重新计算依赖项。即使版本级别没有更改,composer update也会重新计算并下载任何可用库的最新版本。这意味着某些东西有可能被破坏,因此有可能像您可能获得的那样完整的一组回归测试。简而言之,与你实际改变的事情无关的事情可能已经破裂,所以你只想在被迫时引入改变的可能性。

当然,如果你确实介绍了一个新的库,你别无选择,只能运行composer update。

运行编辑器更新后,您的composer.lock文件将更新(按预期方式),生产服务器将在您运行composer install时选择它。

正如其他人所说,将供应商放在您的gitignore中。关键是这些是你依赖的外部库,但它们不属于你的项目,不应该被版本化。在过去,有些人使用git子模块,这是你真正想要避免的一个大PITA,更不用说子模块不能解决你所包含的库的依赖性。

答案 1 :(得分:0)

这取决于你是如何工作的。如果你像getcomposer.org所说的那样忽略了“vendor”文件夹,那么你需要再次运行它。如果您正在对“vendor”文件夹进行版本控制,则无需再次运行它。

请记住,composer将负责管理您的依赖项版本,因此不需要将您的依赖项文件置于版本控制之下。如果你把这些文件放在git下,你只会使你的存储库更大。

阅读https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies

为了澄清当你忽略“vendor”文件夹时,Git不会跟踪文件夹下的文件,所以如果你克隆了repo就会像composer从未被执行过一样