摘要:composer.json 是用于管理 PHP 項目 依賴關系的配置文件。下面是一些常見的 composer.json 配置項及其含義:name: 項目名稱。在發布到 Packagist 上時,這個名稱會變成該包的唯一標識符...
composer.json 是用于管理 PHP 項目 依賴關系的配置文件。下面是一些常見的 composer.json 配置項及其含義:
name: 項目名稱。在發布到 Packagist 上時,這個名稱會變成該包的唯一標識符。
description: 項目描述,用于簡要說明項目的目的和功能。
type: 項目類型,可以是 "library"(庫)、"project"(項目)、"metapackage"(元包)等。
keywords: 一組關鍵詞,用于描述項目的特性、功能或主題,有助于其他開發者更容易找到你的項目。
homepage: 項目的主頁,可以是項目的官方網站或倉庫地址。
license: 項目的許可證類型,用于指定項目的開源許可證。
authors: 項目的作者信息,包括姓名、電子郵件和網址等。
support: 用于提供支持選項的 URL 和/或電子郵件地址。
require: 項目所依賴的其他 PHP 包的版本要求,可以指定包名和版本號,以確保項目能夠正常運行。
require-dev: 與開發相關的依賴關系,通常是開發環境下需要的工具或測試框架等。
conflict: 另一個包與該包存在沖突的版本限制。
replace: 包替換另一個包。
provide: 包提供另一個包的功能。
suggest: 建議安裝的附加功能或庫。
autoload: 自動加載規則的定義,用于告知 Composer 如何加載 PHP 類和文件。
autoload-dev: 自動加載規則的定義,專門用于開發環境。
scripts: 定義項目中使用的自定義腳本(例如測試、構建等)。
下面是一個簡單的 composer.json 配置文件的示例:
{ "name": "my-project", "description": "A simple PHP project", "type": "project", "authors": [ { "name": "yzmcms", "email": "yzmcms@qq.com" } ], "require": { "php": "^7.3|^8.0", "elasticsearch/elasticsearch": "~7.0" }, "autoload": { "psr-4": { "App\\": "app/" } }, "scripts": { "test": "phpunit" } }
在這個示例中,我們定義了 my-project 作為項目名稱,指定了一個簡短的描述,并將項目類型設置為 project。我們列出了一個作者并指定了 php版本 和 elasticsearch/elasticsearch 依賴項,該依賴項用于記錄日志。我們還定義了一個名為 autoload 的規則,告訴 Composer 如何自動加載我們的類文件。最后,我們定義了一個 test 腳本,它調用 PHPUnit 測試框架來執行項目的測試套件。
這里我們著重記錄下依賴項的版本號部分,版本格式:主版本號.次版本號.修訂號,版本號遞增規則如下:
主版本號:當你做了不兼容的 API 修改,
次版本號:當你做了向下兼容的功能性新增,
修訂號:當你做了向下兼容的問題修正。
先行版本號及版本編譯信息可以加到“主版本號.次版本號.修訂號”的后面,作為延伸。
~表示版本號只能改變最末尾那段(如果是~x.y 末尾就是y, 如果是~x.y.z末尾就是z)
~1.2.3 代表 1.2.3 <= 版本號 < 1.3.0
~1.2 代表 1.2 <= 版本號 < 2.0
^表示除了主版本號以外,次版本號和修訂號都可以變
^1.2.3 代表 1.2.3 <= 版本號 <2.0.0
特殊情況 0 開頭的版本號:
^0.3.0 等于 0.3.0 <= 版本號 <0.4.0 注意: 不是 <1.0.0
因為: semantic versioning 的規定是,主版本號以0開頭表示這是一個非穩定版本(unstable),如果處于非穩定狀態,次版本號是允許不向下兼容的。
所以如果你要指定 0 開頭的庫那一定要注意:
危險寫法:~0.1 等于0.1.0 <= 版本號 <1.0.0
保險寫法:^0.1 等于0.1.0 <= 版本號 <0.2.0
當您完成 composer.json 文件的編寫后,可以使用 composer install 命令來安裝所有依賴項。如果您需要新增或移除依賴庫,只需編輯 composer.json 文件并在命令行中運行 composer update 命令即可更新。