Sli*_*liq 159 php deployment composer-php
Composer可以选择仅在开发时加载多个依赖项,因此这些工具不会安装在生产环境中(在实时服务器上).对于仅在开发中有意义的脚本(如测试,伪数据工具,调试器等),这(理论上)非常方便.
要做的就是require-dev使用dev中需要的工具添加一个额外的块:
"require-dev": {
    "codeception/codeception": "1.6.0.3"
}
然后(理论上)通过加载这些依赖
composer install --dev
Composer已经改变了2013年的行为,install并且update在require-dev默认情况下安装了依赖项(!),随意创建一个带有require-dev块的composer.json 并执行composer install重现.
最受欢迎的部署方式是推动作曲家.锁定(保存当前的作曲家设置),然后composer install在生产服务器上执行,这也将安装开发的东西.
在不安装-dev依赖项的情况下部署此方法的正确方法是什么?
注意:我正在尝试创建一个规范的Q/A,以澄清奇怪的Composer部署.随意编辑这个问题.
Jas*_*wer 287
为什么
恕我直言,如今,Composer将--dev默认使用该标志(在安装和更新时).Composer主要在场景中运行,这是期望的行为:
基本的Composer工作流程如下:
composer.phar install --devjson和lock文件被提交给VCS.composer.phar install --dev.composer.phar require <package>,请添加.--devrequire-devcomposer.phar install --dev.composer.phar update --dev <package>和提交).composer.phar install --dev.composer.phar install --no-dev正如您所看到的那样,--dev标志比--no-dev标志更多地使用(特别是当项目开发人员数量增加时).
生产部署
在没有安装"dev"依赖项的情况下部署它的正确方法是什么?
那么,composer.json和composer.lock文件应该提交给VCS.不要省略,composer.lock因为它包含应该使用的包版本的重要信息.
执行生产部署时,您可以将--no-dev标志传递给Composer:
composer.phar install --no-dev
该composer.lock文件可能包含有关dev-packages的信息.这没关系.该--no-dev标志将确保未安装这些开发包.
当我说"生产部署"时,我指的是旨在用于生产的部署.我不是在讨论是composer.phar install应该在生产服务器上还是在可以查看内容的登台服务器上完成的.这不是这个答案的范围.我只是指出如何composer.phar install不安装"dev"依赖项.
无关
--optimize-autoloader生产时也可能需要该标志(它会生成一个类映射,可以加速应用程序中的自动加载):
composer.phar install --no-dev --optimize-autoloader
或者在完成自动部署时:
composer.phar install --no-ansi --no-dev --no-interaction --no-plugins --no-progress --no-scripts --no-suggest --optimize-autoloader
Sve*_*ven 70
我的建议是检查部署机器上的代码,根据需要安装依赖项(这包括在代码进入生产时不安装dev依赖项),然后将所有文件移动到目标机器.
为什么?
composer install简而言之:在您可以控制的环境中使用Composer.您的开发机器确实符合条件,因为您已经拥有运行Composer所需的所有东西.
在不安装-dev依赖项的情况下部署此方法的正确方法是什么?
要使用的命令是
composer install --no-dev
这将适用于任何环境,无论是生产服务器本身,还是部署机器,或者应该进行最后检查以查找是否有任何开发需求被错误地用于真实软件的开发机器.
该命令不会安装或主动卸载composer.lock文件中声明的dev要求.
如果您不介意在生产服务器上部署开发软件组件,则运行composer install将执行相同的工作,但只是增加移动的字节数,并创建更大的自动加载器声明.
现在require-dev默认启用,对于本地开发,您可以执行composer install并且composer update不使用该--dev选项。
当您想要部署到生产环境时,您需要确保composer.lock没有任何来自require-dev.
你可以这样做
composer update --no-dev
使用本地测试后,--no-dev您可以将所有内容部署到生产环境并基于composer.lock. 您在--no-dev这里再次需要该选项,否则作曲家会说“锁定文件不包含 require-dev 信息”。
composer install --no-dev
注意:小心任何有可能在开发和生产之间引入差异的东西!我通常尽量避免使用 require-dev,因为包含开发工具并不是一个很大的开销。
| 归档时间: | 
 | 
| 查看次数: | 122017 次 | 
| 最近记录: |