composer.jsonにbinが指定されているパッケージをインストールする時、composerはスタブとなるバッチファイルやシェルスクリプトをvendor/binに作成する。
この処理はプラットフォームによって異なっていて、具体的な処理はComposer\Installer\LibraryInstallerのinstallBinariesに見ることができる。
- Windowsの場合はバッチファイルとシェルスクリプトを作成する。シェルスクリプトはCygwinなどのために作成する。
- Unixの場合は、まずスタブを作成せずに単にシンボリックリンクを作成する。
- しかし、ファイルシステムによってはシンボリックリンクが使えない場合がある(smbfsや、VirtualBoxの共有フォルダなど)。このため、シンボリックリンクの作成に失敗した場合はシェルスクリプトを作成する。
例えばphpunitをインストールした場合は、
- の場合、バッチファイル
vendor/bin/phpunit.batとシェルスクリプトvendor/bin/phpunitが作成される - の場合、
vendor/phpunit/phpunit/phpunitのシンボリックリンクがvendor/bin/phpunitに作成される - の場合、シェルスクリプト
vendor/bin/phpunitが作成される
追記
bin-compat:(auto|nosymlink|full)という設定が追加されたようだ。後で調べる。
https://github.com/composer/composer/pull/3704
関連