Vendor 二進制文件和 vendor/bin 目錄#

Vendor 二進制文件是什麼?#

Composer 套件想一起傳遞給安裝該套件使用者的任何命令列指令碼應該被列為一個 vendor 二進制文件。

如果一個套件包含其他不被套件使用者需要的指令碼(如建構或編譯指令碼), 該程式碼不應該被列為一個 vendor 二進制文件。

它是如何定義?#

它是透過添加 bin 鍵到專案的 composer.json 來定義。 它被指定為一個檔案的陣列, 以便多個二進制文件可以被任何所給專案添加。

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

在 composer.json 中定義一個 vendor 二進制文件會做什麼?#

它指導 Composer 為任何依賴該套件的套件安裝套件的二進制文件到 vendor/bin

這是一個便利的方式來揭露有用的指令碼,否則將被深藏在 vendor/ 目錄中。

當 Composer 是運行在一個定義了 vendor 二進制文件的 composer.json 會怎樣?#

對於套件直接定義的二進制文件,什麼也沒發生。

當 Composer 是運行在一個依賴套件有條列 vendor 二進制文件的 composer.json 會怎樣?#

Composer 會尋找定義在所有依賴套件中的二進制文件。 來自每個依賴套件的二進制文件到 vendor/bin 的符號連結會被建立。

假設 my-vendor/project-a 套件有像這樣的二進制文件設置:

{
    "name": "my-vendor/project-a",
    "bin": ["bin/project-a-bin"]
}

為此 composer.json 執行 composer install 不會對 bin/project-a-bin 做任何事。

假設 my-vendor/project-b 專案有像這樣的需求設置:

{
    "name": "my-vendor/project-b",
    "require": {
        "my-vendor/project-a": "*"
    }
}

為此 composer.json 執行 composer install 會著眼於 project-b 的所有依賴套件,並安裝他們到 vendor/bin

在這個情況下,Composer 會讓 vendor/my-vendor/project-a/bin/project-a-bin 可做為 vendor/bin/project-a-bin。在一個類 Unix 平台, 這是透過建立一個連結來完成的。

那 Windows 和 .bat 檔案呢?#

完全由 Composer 管理的套件 不需要 為 Windows 相容性包含任何 .bat 檔案。在 Windows 環境運行時, Composer 以特殊的方式處理二進制文件的安裝:

需要支援可能不引入 Composer 工作流程的套件,歡迎維護自訂的 .bat 檔案。在這種情況下,套件不應該列出 .bat 檔案做為一個二進制文件,因為沒必要。

Vendor 二進制文件可以被安裝在 vendor/bin 之外的地方嗎?#

可以,有兩種可指定替代 vendor 二進制文件位置的方法:

  1. 設定在 composer.json 中的 bin-dir 配置設定
  2. 設定環境變數 COMPOSER_BIN_DIR

前者的一個範例,看起來像這樣:

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

對這個 composer.json 執行 composer install 會導致所有的 vendor 二進制文件被安裝在 scripts/ 而非 vendor/bin/

你可以設定 bin-dir./ 以在你的專案根目錄中放置二進制文件。

發現錯字?在這個文件中有些錯誤?只要 fork 並編輯 它!