問題描述

如果我的插件的潛在用户可以通過 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。