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
関連