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