为什么
恕我直言,现在Composer默认使用该标志(在安装和更新时)有一个很好的理由。Composer 主要在需要以下行为的场景中运行:--dev
基本的 Composer 工作流如下所示:
- 一个新项目已启动:、json 和锁文件将提交到 VCS。
composer.phar install --dev
- 其他开发人员开始处理该项目:检出VCS和.
composer.phar install --dev
- 开发人员添加依赖项:,如果您希望在部分(和提交)中包含包,请添加。
composer.phar require <package>
--dev
require-dev
- 其他人一起去:(结帐和)。
composer.phar install --dev
- 开发人员需要较新版本的依赖项:(和提交)。
composer.phar update --dev <package>
- 其他人一起去:(结帐和)。
composer.phar install --dev
- 项目部署:
composer.phar install --no-dev
如您所见,标志的使用(远远超过)标志,特别是当从事该项目的开发人员数量增加时。--dev
--no-dev
生产部署
在不安装“dev”依赖项的情况下部署它的正确方法是什么?
好吧,和文件应该提交到VCS。不要省略,因为它包含有关应使用的包版本的重要信息。composer.json
composer.lock
composer.lock
执行生产部署时,您可以将标志传递给 Composer:--no-dev
composer.phar install --no-dev
该文件可能包含有关开发包的信息。这并不重要。该标志将确保未安装这些开发包。composer.lock
--no-dev
当我说“生产部署”时,我的意思是旨在用于生产中的部署。我不是在争论是否应该在生产服务器上完成,还是在可以查看事物的暂存服务器上完成。这不是本答案的范围。我只是指出如何在不安装“开发”依赖项的情况下进行操作。composer.phar install
composer.phar install
题外话
该标志在生产中也可能是可取的(它会生成一个类映射,这将加快应用程序中的自动加载速度):--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