引入本機環境上的 PHP 套件
如果你正在開發自己的 PHP 套件,或是想修改並測試他人的 PHP 套件,那麼將這些套件引入到其他專案中進行實驗會是很常見的情況。
在現代 PHP 開發中,都會要求專案和套件使用 Composer 來管理依賴套件。但問題來了:該如何使用 Composer 引入自己開發的套件呢?
最直接的方式當然就是將自已的套件發佈到 Packagist,然後透過 Composer 下載下來並引入,不只給你自己使用,還能分享給大家使用。但有時候你可能只是想測試一個新的想法,還未準備好正式發佈。而且如果是別人的套件,基於禮貌,你當然不能因為想測試就隨意提出 PR (Pull Request)。
套件維護者:這是什麼鬼 PR?
我:抱歉,我想測試一個想法,幫我合併一下。😚
套件維護者:蛤?😳
其實上面的問題,還有一個更簡單的方式:直接在專案中引入本機環境上的套件。
在專案中引入本機環境上的套件
如果你想在專案中引入本機環境上的套件,以方便對套件的修改進行測試。我們需要修改一下專案的 composer.json
。
首先新增一個 repositories
區塊,用來表明套件的來源位置。因為我們想引入的套件就在本機環境上,因此我們需要在這個區塊說明套件來源不是 Packagist,而是我們自己的電腦。
{
"repositories": [
{
"type": "path",
"url": "/Users/allen/code/php/my-package",
"options": {
"symlink": true
}
}
]
}
url
欄位為套件在電腦上的絕對路徑。將 symlink
設定為 true
,可以讓 vendor
底下的套件,以軟連結的方式,連結到絕對路徑所指向的套件資料夾。
軟連結的好處在當套件程式碼被修改時,專案不需要再更新套件,而是會直接使用修改後的程式碼。
# 使用 tree 指令查看資料夾
tree vendor/my-package -L 1
# 顯示結果 my-package 資料夾為軟連結,指向我們在 url 設定的路徑
# vendor/my-package
# └── my-package -> /Users/allen/code/php/my-package/
接下來繼續修改專案的 composer.json
,我們需要修改引入套件的版本號碼。
"require": {
"allen/my-package": "@dev"
}
關於 @dev
版本號碼的設定,源自於套件 composer.json
的 minimum-stability
。
{
"minimum-stability": "dev"
}
@
符號為 Stability Flags,代表你可以超出最小穩定性設定的範圍,以允許你安裝某個套件的非穩定版本。
以下是 Composer 官方文件對於
@
符號用途的解釋These allow you to further restrict or expand the stability of a package beyond the scope of the minimum-stability setting.
You can apply them to a constraint, or apply them to an empty constraint if you want to allow unstable packages of a dependency for example.
專案的 composer.json
設定好了之後就可以在專案引入套件了!在專案底下使用指令來更新套件。
composer update
更新成功之後,當你直接修改套件的程式碼時,引用該套件的專案就會直接使用你修改後的程式碼。對於想要在本機環境上測試套件的人來說,真的非常方便!😉