When you install
or update
a project with composer, you can tell it to skip the development related dependencies (tests, build tools, etc.) with the --no-dev
flag
composer.phar update --no-dev
Without this flag, composer will always download the extra dependencies.
Is there any way (programmatically or otherwise) to tell composer to always skip the development dependencies? That is, is there anything real code that matches the pseudo code
//File: composer.json
//...
"no-dev":"true"
//...
In short: no - not, yet.
Composer's default installation mode is to install development dependencies.
As far as i know, there is only the CLI option --no-dev
and no config option.
It's possible to define a config section in the composer.json of a project, see https://getcomposer.org/doc/04-schema.md#config
But a quick glance at the source code revealed, that there is no configuration directive for this. https://github.com/composer/composer/blob/master/src/Composer/Config.php#L22
{
"config": {
"no-dev": "true"
}
}
+1 for this idea. It could be a useful addition to the Config class.
This was really annoying, so I finally wrote a simple bash script which asks about environment and run correct command:
#! /bin/bash
read -p "Which environment use to deploy: (P)roduction (T)est (D)ev? (p/t/d): " -n 1 -r
echo
if [[ $REPLY =~ ^[^PpTtDd]$ ]]; then
echo "Incorrect environment";
exit 1;
fi
# tasks to run before composer install (svn up/git pull)
if [[ $REPLY =~ ^[Pp]$ ]]; then
composer install --prefer-dist --no-dev --classmap-authoritative
elif [[ $REPLY =~ ^[Tt]$ ]]; then
composer install --prefer-dist --classmap-authoritative
elif [[ $REPLY =~ ^[Dd]$ ]]; then
composer install
fi
# additional tasks after composer install (clear cache, migrations, etc.)
Saved it in bin/deploy
in project and added execute permissions. So now I'm using bin/deploy
instead of composer install
:
I also put other common tasks there (pull changes from VCS, clear cache, run migrations, etc.), so I have even less things to do and remember during deployment :).