問題描述

如果我的外掛的潛在使用者可以透過 WPackagist 將其作為一個包來顯式地包含 composer.json 檔案在我的外掛中的優勢是什麼?

最佳解決方案

長話短說

如果要支援 Composer,則新增 composer.json 更好,然後讓 WPackagist 為您建立一個包。

有幾個原因,沒有人真的很重要,但考慮到建立 composer.json 不需要太多的努力,這可能值得。

composer.json 的優點

以下是使用 composer.json 的 non-exhaustive 列表。

開發人員友好

當您需要一個軟體包時,Composer 查詢儲存庫以查詢該特定軟體包。 Packagist 和 WPackagist 是 2 個儲存庫。

不同的是,Packagist 總是由 Composer 解析,而 WPackagist 必須手動新增到專案 composer.json

要在 Packagist 上要求外掛,您需要在 composer.json 中單行:

"require": {
    "your-name/your-plugin-name":"1.*",
}

要在 WPackagist 上要求外掛,您還需要配置儲存庫:

"repositories":[
    {
        "type":"composer",
        "url":"http://wpackagist.org"
    }
],
"require": {
    "your-name/your-plugin-name":"1.*",
}

這在使用命令列時也是有用的,見

composer create-project your-name/your-plugin-name

VS

composer create-project wpackagist-plugin/your-plugin-name --repository-url=http://wpackagist.org

Performance

當一個專案包含更多的儲存庫時,Composer 會發現所有這些都可以找到有關軟體包的資訊。

所以新增 WPackagist 儲存庫,減慢安裝速度。還要考慮到所有的伺服器都可以關閉,任何共鳴。它比 WPackagist 之外的公司要大得多,所以每個你新增的儲存庫都是一個額外的可能的故障點。

Configuration

有一個 composer.json 的優點是您可以配置 Composer 將獲取外掛的方式。

例如,您可以在 name 屬性中配置軟體包名稱,而不是讓 WPackagist 為您建立軟體包名稱。

此外,還有很多配置可以在 composer.json 中完成,只是幾個例子:

  • 您可以使用 branch-alias 設定來提高外掛開發版本的相容性

  • 即使沒有依賴關係,也可以使用 require 設定最小 PHP 版本,

  • conflict 設定可讓您明確告知衝突的程式包…

等等。

所有權意識

當您需要 WPackagist 的外掛時,包名稱中的”vendor” 部分始終為 wpackagist-plugin

所以人們會要求你外掛像:

"require": {
    "wpackagist-plugin/your-plugin-name":"1.*",
}

如果你把外掛放在 packagist 上,你可以使用自己的供應商字首,我認為更適合營銷:

"require": {
    "your-name/your-plugin-name":"1.*",
}

Autoload

Composer 為軟體包提供自動載入。如果您決定使用 Composer,您可以從中受益。但是,考慮到您將外掛運送到官方的售後服務中,您需要考慮到您的大多數使用者可能會安裝您的外掛而不使用 Composer 。這意味著你必須有可能:

  • 傳送”vendor” 資料夾 (包含自動載入) 內部您的外掛資料夾在官方回購

  • 使用自定義自動裝載機或手動載入機制,以防外掛在沒有 Composer 的情況下使用。

第二種可能性僅僅是因為您的外掛沒有由 Composer 處理的依賴關係,否則,出貨供應商資料夾是使您的外掛在沒有 Composer 的情況下工作的唯一可能性,但不是 issue-free:當使用嵌入式供應商資料夾安裝不同的外掛時,的版本衝突,如果不同的外掛執行不同版本的同一個包。

明確作曲家支援

透過新增 composer.json,讓人們知道您明確支援 Composer 。例如,當我搜尋一個外掛時,在外掛資料夾中找到一個 composer.json 對我來說是一個很大的好處,因為我傾向於不使用不這樣做的外掛。

此外,還有一些工具可以將外掛解釋為支援 Composer 。

例如,我有一個指令碼阻止具有 composer.json 的外掛/主題的自動更新。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。