Why
恕我直言,Composer 有充分的理由使用--dev
默认标记(安装时and更新)现在。 Composer 主要在需要这种行为的场景中运行:
Composer 的基本工作流程如下:
- 一个新项目开始了:
composer.phar install --dev
、json 和 lock 文件提交到 VCS。
- 其他开发人员开始从事该项目:检查 VCS 和
composer.phar install --dev
.
- 开发人员添加依赖项:
composer.phar require <package>
, add --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”依赖项的情况下部署它的正确方法是什么?
嗯,composer.json
and composer.lock
文件应提交至 VCS。不要省略composer.lock
因为它包含有关应使用的包版本的重要信息。
执行生产部署时,您可以传递--no-dev
给作曲家的标志:
composer.phar install --no-dev
The composer.lock
文件可能包含有关开发包的信息。这没关系。这--no-dev
flag 将确保那些开发包没有安装。
当我说“生产部署”时,我指的是旨在用于生产的部署。我并不是在争论是否composer.phar install
应该在生产服务器或可以进行审查的临时服务器上完成。这不是这个答案的范围。我只是指出如何composer.phar install
无需安装“dev”依赖项。
Offtopic
The --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
for --classmap-authoritative
。更多信息here https://getcomposer.org/doc/articles/autoloader-optimization.md