Composer Vendor Binaries

2018-09-28 20:23 更新

二進(jìn)制供應(yīng)庫(kù)和 vendor/bin 目錄

什么是二進(jìn)制供應(yīng)庫(kù)?

一個(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"]
}

在 composer.json 里定義二進(jìn)制供應(yīng)庫(kù)的作用是?

對(duì)于任何 依賴于 該資源包的項(xiàng)目, 它將引導(dǎo) Composer 安裝資源包里的二進(jìn)制文件到 vendor/bin 目錄。

這是一個(gè)便捷的途徑來(lái)暴露有用的腳本, 否則它們將會(huì)被隱藏在 vendor/ 目錄的深處。

當(dāng) Composer 運(yùn)行到定義了二進(jìn)制供應(yīng)庫(kù)的 composer.json 文件時(shí)發(fā)生了什么?

對(duì)于被某個(gè)資源包直接定義的二進(jìn)制供應(yīng)庫(kù),什么也不會(huì)發(fā)生。

當(dāng) Composer 運(yùn)行到,列出了二進(jìn)制供應(yīng)庫(kù)依賴關(guān)系的 composer.json 文件時(shí)發(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)的。

對(duì)于 Windows 環(huán)境和 .bat 文件呢?

完全由 Composer 管理的包并不 需要 包含任何用以兼容 Windows 的 .bat 文件。在 Windows 環(huán)境下運(yùn)行時(shí),Composer 會(huì)用一種特殊的方式處理 二進(jìn)制文件的安裝:

  • 一個(gè)用以引用此二進(jìn)制文件的 .bat 文件會(huì)自動(dòng)生成
  • 一個(gè)與該二進(jìn)制文件同名的 Unix 風(fēng)格的代理文件也會(huì)自動(dòng)生成 (方便 Cygwin 或 Git Bash 使用)

有時(shí)資源包需要維護(hù)自定義的 .bat 文件來(lái)支持工作流,它可以不包含在 Composer 中。 這種情況下,該資源包 應(yīng)該把它們作為二進(jìn)制文件列出,因?yàn)?Composer 不需要知道它們。

二進(jìn)制供應(yīng)庫(kù)可以安裝在 vendor/bin 以外的其它地方么?

當(dāng)然,這里有兩種指定二進(jìn)制供應(yīng)庫(kù)的其他可選位置的方法:

  1. composer.json 文件中的 bin-dir 配置屬性處設(shè)置
  2. 設(shè)置環(huán)境變量 COMPOSER_BIN_DIR

前者的實(shí)例如下:

{
    "config": {
        "bin-dir": "scripts"
    }
}

在這個(gè) composer.json 上運(yùn)行 composer install 會(huì)把所有的二進(jìn)制供應(yīng)庫(kù) 都安裝在 scripts/ 目錄,而不是缺省的 vendor/bin/ 目錄。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)