vendor/bin
目錄一個 Composer 資源包,想要傳遞給安裝它的用戶的任何命令行腳本, 都應(yīng)該被列入 二進制供應(yīng)庫
。
如果一個資源包,含有不被用戶所需要的其他腳本(比如構(gòu)建或編譯腳本) 那么這些代碼不應(yīng)該被列入二進制供應(yīng)庫。
它是通過在項目的 composer.json
里添加一個 bin
鍵定義的。 它是以一種文件的數(shù)組的形式定義的,這樣任何給定的項目 都可以添加多個二進制文件。
{
"bin": ["bin/my-script", "bin/my-other-script"]
}
對于任何 依賴于 該資源包的項目, 它將引導 Composer 安裝資源包里的二進制文件到 vendor/bin
目錄。
這是一個便捷的途徑來暴露有用的腳本, 否則它們將會被隱藏在 vendor/
目錄的深處。
對于被某個資源包直接定義的二進制供應(yīng)庫,什么也不會發(fā)生。
Composer 會檢查所有依賴包里定義的二進制文件。 并為每一個依賴的二進制庫設(shè)立一個指向 vendor/bin
的軟連接。
比如 my-vendor/project-a
資源包的二進制庫就是這樣安裝的:
{
"name": "my-vendor/project-a",
"bin": ["bin/project-a-bin"]
}
在該 composer.json
上執(zhí)行 composer install
命令, 不會對 bin/project-a-bin
造成任何影響。
再比如項目 my-vendor/project-b
有這樣的 require 定義:
{
"name": "my-vendor/project-b",
"require": {
"my-vendor/project-a": "*"
}
}
在該 composer.json
上執(zhí)行 composer install
命令時, 將會檢查 project-b 的所有依賴包,并安裝它們的二進制庫到 vendor/bin
目錄。
這種情況下,Composer 將使 vendor/bin/project-a-bin
可以作為 vendor/my-vendor/project-a/bin/project-a-bin
的訪問路徑。在類 Unix 平臺上, 這是通過創(chuàng)建軟鏈接實現(xiàn)的。
完全由 Composer 管理的包并不 需要 包含任何用以兼容 Windows 的 .bat
文件。在 Windows 環(huán)境下運行時,Composer 會用一種特殊的方式處理 二進制文件的安裝:
.bat
文件會自動生成有時資源包需要維護自定義的 .bat
文件來支持工作流,它可以不包含在 Composer 中。 這種情況下,該資源包 不 應(yīng)該把它們作為二進制文件列出,因為 Composer 不需要知道它們。
當然,這里有兩種指定二進制供應(yīng)庫的其他可選位置的方法:
composer.json
文件中的 bin-dir
配置屬性處設(shè)置COMPOSER_BIN_DIR
前者的實例如下:
{
"config": {
"bin-dir": "scripts"
}
}
在這個 composer.json
上運行 composer install
會把所有的二進制供應(yīng)庫 都安裝在 scripts/
目錄,而不是缺省的 vendor/bin/
目錄。
更多建議: