引入本機環境上的 PHP 套件

程式技術
引入本機環境上的 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.jsonminimum-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

更新成功之後,當你直接修改套件的程式碼時,引用該套件的專案就會直接使用你修改後的程式碼。對於想要在本機環境上測試套件的人來說,真的非常方便!😉

參考資料

sharkHead
written by
sharkHead

後端打工仔,在下班後喜歡研究各種不同的技術。稍微擅長 PHP,並偶爾涉獵前端開發。個性就像動態語言般隨興,但渴望做事能像囉嗦的靜態語言那樣嚴謹。

0 則留言
新增留言
編輯留言