Composer 的工作原理
我們在使用 Composer 之前我們得了解一下它的實現原理,它主要由三個部分組成:命令行工具、包倉庫、代碼庫:
Packagist
它是官方倉庫,也就是我們平常說的 Composer 源,它的作用是存儲這些包的信息,版本,代碼來源,依賴,作者,主頁等信息。官網是 packagist.org/, 你也可以將自己的包發布在上面,這樣 Composer 工具就能搜索與安裝你的包了,后面我們會具體介紹發布流程。
Repository
代碼倉庫,Packagist 支持公開與私有倉庫,通常是 GitHub 作為代碼倉庫,當然也可以是 BitBucket 或者 GitLab。
Vendor directory
我們的 Composer 依賴包都統一安裝在項目的 vendor
目錄下,其中還有 vendor/composer
目錄用于存儲依賴包的一些基本信息,比如命名空間等。
Composer創建SDK
初始化Composer
確保在項目目錄中初始化Composer。如果你還沒有Composer,請先安裝它。
composer init
當你運行composer init
命令時,會開始一個交互式過程,系統將詢問你有關項目的一些信息。以下是可能會被詢問的問題以及應該如何回答:
-
Package name (
vendor-name/package-name
) [默認為當前目錄名]:
-
這是你的SDK包的名稱。默認情況下,Composer會使用當前目錄名,但你可以根據需要更改。
-
Description [默認為None]:
描述你的SDK的簡短說明。
-
Author [默認為None]:
輸入你的名字和郵箱。
-
Minimum Stability [默認為stable]:
你可以選擇包的最低穩定性。大多數情況下,保持默認即可。
-
Package Type [默認為library]:
通常是library
,如果你的項目是一個應用程序,則可能選擇project
。
-
License [默認為MIT]:
選擇你打算使用的許可證類型。
-
Would you like to define your dependencies (require) interactively? [yes]:
是否要交互式地定義依賴項。選擇“yes”會引導你添加依賴項。
-
Search for a package:
在這里,你可以搜索并選擇你想要添加的依賴項。例如,你可以搜索"guzzlehttp/guzzle"
以添加 Guzzle HTTP 客戶端。
-
Would you like to define your dev dependencies (require-dev) interactively? [yes]:
是否要交互式地定義開發環境下的依賴項。選擇“yes”會讓你添加開發環境下的依賴項,例如測試框架或代碼檢查工具。
-
Search for a package (for dev):
類似于第 8 步,在這里你可以搜索并添加開發環境下的依賴項。
完成這些步驟后,Composer 將根據你提供的信息生成一個composer.json
文件,其中包含了你項目的基本信息、依賴項等。這個文件會被用來管理你的項目所需的各種依賴項以及包的配置信息。
定義依賴項
在composer.json
文件中,定義你的SDK的依賴項。這可能包括SDK的名稱、版本號和其他信息。
{"name": "your-vendor-name/your-sdk-name","description": "Description of your SDK","require": {"php": "^7.3",// 你的依賴項},"autoload": {"psr-4": {"YourNamespace\\": "src/"}}
}
確保將YourNamespace
替換為你想要的命名空間。
SDK目錄結果
├── CHANGELOG.md
├── LICENSE
├── Makefile
├── README.md
├── composer.json
├── composer.lock
├── docs
│?? ├── README.md
├── phpunit.xml
├── scripts
│?? └── php_lint.sh
├── src
│?? └── Support
│?? └── helpers.php
└── tests├── AbstractTestCase.php├── Feature├── Unit│?? └── ExampleTest.php└── bootstrap.php