require-dev のパッケージに依存したスクリプトを post-install-cmd 等のフックで dev時のみ実行したい(–no-dev時には実行したくない)ときは [ $COMPOSER_DEV_MODE -eq 0 ] ||
を実行したいスクリプトの前に付与します。
ネタ元: php – Composer – run scripts only in dev environment – Stack Overflow の 回答
例: phpcsの installed_paths に cakephp/cakephp-codesniffer を追加する
// (composer.json)
"require-dev": {
"cakephp/cakephp-codesniffer": "^3.0"
},
"scripts": {
"post-install-cmd": {
"[ $COMPOSER_DEV_MODE -eq 0 ] || phpcs --config-set installed_paths $(composer config vendor-dir)/cakephp/cakephp-codesniffer"
}
}
# 実行
composer install --no-dev # -> cakephp/cakephp-codesniffer はインストールされず、post-install-cmdのphpcs --config-setも実行されない
composer install # -> cakephp/cakephp-codesniffer がインストールされ、post-install-cmdのphpcs --config-setが実行される
composer のスクリプト実行時にセットされる環境変数 $COMPOSER_DEV_MODE
は、--no-dev
フラグがついているときに 0
それ以外は 1
がセットされるようになっています。 Defining scripts – composer
--no-dev
時は、[ $COMPOSER_DEV_MODE -eq 0 ]
が真となるので、以降のスクリプトが実行されないという仕組みです。
ide-helper等をpost-*-cmdで実行するときにも使えますね。