FC2 ブログ

ぎじゅつのメモ

PHPのcomposerでvendor/binにシムリンクを張らせない

PHPのパッケージ管理システムのcomposerでinstallしたパッケージに
バイナリやスクリプトが含まれていた場合に、Windows以外だと、
bin-dir(デフォルト: vendor/bin) で指定されたディレクトリにシムリンクが張られてしまう。

例えばphpunitのように、
phpunit/composer.json at master · sebastianbergmann/phpunit · GitHub

"bin": [
    "phpunit"
],

と"bin"の指定があるものをcomposerでインストールした場合。

シムリンクってwebサービス運用上まれによく困ることがある。
(そんなことないと思いたいけど、そういうことが、ある。)

そんなときは、composerのconfigの設定を変えるとシムリンクではなく実体にすることができる。
以下のように "bin-compat" : "full" を指定してやる(デフォルト: "auto")

{
    ...
    "config": {
        "bin-compat": "full"
    },
    ....
}

getcomposer.org

composerの上記挙動は↓の installBinaries メソッドあたりを読むと分かる

composer/BinaryInstaller.php at master · composer/composer · GitHub