Composer post-install-cmd で dev の時のみ実行するスクリプトを定義する

標準

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で実行するときにも使えますね。

コメントを残す

Page optimized by WP Minify WordPress Plugin