Composer Vendor Binaries

2018-09-28 20:23 更新

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

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

一個 Composer 資源包,想要傳遞給安裝它的用戶的任何命令行腳本, 都應(yīng)該被列入 二進(jìn)制供應(yīng)庫。

如果一個資源包,含有不被用戶所需要的其他腳本(比如構(gòu)建或編譯腳本) 那么這些代碼不應(yīng)該被列入二進(jìn)制供應(yīng)庫。

如何定義?

它是通過在項目的 composer.json 里添加一個 bin 鍵定義的。 它是以一種文件的數(shù)組的形式定義的,這樣任何給定的項目 都可以添加多個二進(jìn)制文件。

{
    "bin": ["bin/my-script", "bin/my-other-script"]
}

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

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

這是一個便捷的途徑來暴露有用的腳本, 否則它們將會被隱藏在 vendor/ 目錄的深處。

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

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

當(dāng) Composer 運(yùn)行到,列出了二進(jìn)制供應(yīng)庫依賴關(guān)系的 composer.json 文件時發(fā)生了什么?

Composer 會檢查所有依賴包里定義的二進(jìn)制文件。 并為每一個依賴的二進(jìn)制庫設(shè)立一個指向 vendor/bin 的軟連接。

比如 my-vendor/project-a 資源包的二進(jìn)制庫就是這樣安裝的:

{
    "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 的所有依賴包,并安裝它們的二進(jìn)制庫到 vendor/bin 目錄。

這種情況下,Composer 將使 vendor/bin/project-a-bin 可以作為 vendor/my-vendor/project-a/bin/project-a-bin 的訪問路徑。在類 Unix 平臺上, 這是通過創(chuàng)建軟鏈接實現(xiàn)的。

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

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

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

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

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

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

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

前者的實例如下:

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

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號