Composer 可以选择仅在开发时加载多个依赖项,因此这些工具不会安装在生产中(在实时服务器上)。这(理论上)对于仅在开发中才有意义的脚本非常方便,例如测试、假数据工具、调试器等。
要走的路是require-dev用你在开发中需要的工具添加一个额外的块:
require-dev
"require-dev": { "codeception/codeception": "1.6.0.3" }
然后(理论上)通过加载这些依赖项
composer install --dev
Composer 已在 2013 年显着改变了行为,install现在默认安装 -dependencies (!),随意创建带有块的 composer.json 并执行重现。update``require-dev``require-dev``composer install
install
update``require-dev``require-dev``composer install
由于最被接受的部署方式是推送作曲家。 锁定 (保存您当前的作曲家设置),然后composer install在生产服务器上执行,这也将安装开发的东西。
composer install
在不 安装 -dev 依赖项的情况下部署它的正确方法是什么?
注意:我试图在这里创建一个规范的 Q/A 来澄清奇怪的 Composer 部署。随意编辑这个问题。
为什么
--dev恕我直言,Composer 现在默认使用该标志(在安装 和 更新时)是有充分理由的。Composer 主要在需要行为的场景中运行:
--dev
Composer 的基本工作流程如下:
composer.phar install --dev
composer.phar require <package>
composer.phar update --dev <package>
composer.phar install --no-dev
如您所见,--dev标志的使用(远)多于--no-dev标志,尤其是当从事该项目的开发人员数量增加时。
--no-dev
生产部署
在不安装“dev”依赖项的情况下部署它的正确方法是什么?
好吧,composer.jsonandcomposer.lock文件应该提交给 VCS。不要省略composer.lock,因为它包含有关应使用的包版本的重要信息。
composer.json
composer.lock
执行生产部署时,您可以将--no-dev标志传递给 Composer:
该composer.lock文件可能包含有关开发包的信息。这没关系。该--no-dev标志将确保未安装这些开发包。
当我说“生产部署”时,我指的是旨在用于生产的部署。我不是在争论是否composer.phar install应该在生产服务器上完成,还是在可以审查事情的登台服务器上完成。这不是这个答案的范围。我只是指出如何composer.phar install不安装“开发”依赖项。
composer.phar install
无关
该--optimize-autoloader标志在生产中也可能是可取的(它会生成一个类映射,这将加速您的应用程序中的自动加载):
--optimize-autoloader
composer.phar install --no-dev --optimize-autoloader
或者当自动部署完成时:
composer.phar install --no-ansi --no-dev --no-interaction --no-plugins --no-progress --no-scripts --optimize-autoloader
如果你的代码库支持它,你可以--optimize-autoloader换成--classmap-authoritative. 更多信息在这里
--classmap-authoritative