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 を追加する
1 2 3 4 5 6 7 8 9 10 |
// (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" } } |
1 2 3 4 5 |
# 実行 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で実行するときにも使えますね。