透過 Composer 安裝 Private Package
前言
Composer 是一個強大的 PHP 套件管理工具,讓你可以方便地使用在 packagist.org 上的開源 PHP 套件。但有時候,團隊可能有一些內部的工具或特殊套件,並且不想讓外界看到。這時候,你就需要自己來管理這些 Private Packages。
除了使用 packagist.com 的付費服務外,如果是預算有限或者有其他考量,則可以考慮自行管理需要的 Private Packages。
以下內容會整理出如何使用 Composer 安裝自己的 Private Package。
可以使用的 Composer Repository Types
Composer 本身提供的多種 Types 進行 package 的管理,這裡先以 VCS 與 Path 為主簡單紀錄
使用 VCS
Local Git Repository
在本地建立 package 的 Git Repository
專案與 packages 的資料夾結構如下:
Directory
1 | ├── apps |
apps/my-app/composer.json
1 | { |
GitHub Repository
假設目前已經把 Package 做好並放在 GitHub 的 Private Repository 裡。
接下來,我們要讓 Composer 有權限去存取這個 Private Repository,這裡使用最常用的 SSH 的方式,讓 Composer 能夠連接到我們在 GitHub 上的 Private Repository
準備 Github 專用的 SSH Key
1
cd ~/.ssh/ && ssh-keygen -t rsa -b 4096 -C "your-email@example.com"
並將檔案名稱設定為
github_ssh
修改
~/.ssh/config
1
2
3
4Host *
Hostname github.com
User git
IdentityFile ~/.ssh/github_ssh
apps/my-app/composer.json
1 | "repositories": [ |
使用 Path
在本地建立 Package 的 Git Repository
專案與 Packages 的資料夾結構如下:
Directory
1 | ├── apps |
apps/my-app/composer.json
1 | { |
- symlink
- 啟用時,會跟目標路徑的內容做同步,會即時反應修改
- 關閉時,會複製一份獨立的內容,如果有修改則需要再重新安裝一次
- 透過 path 的方式會直接抓取最新檔案,不會參考
composer.json
裡面的版本限制
安裝 my-package
會參考 my-package 的 composer.json 裡面的 name,以 packages/my-package
為例
需要以 dev-* 的方式指定版本
1 | composer require packages/my-package:dev-main |
備註
- 注意 my-package 的 main branch 裡 composer.json 的 package name,抓取的時候會優先以 main 為主,如果 main branch 與 feature branch 不同的話可能會找不到 Repository,開發時可以多利用 composer require -v packages/my-package 的方式了解操作的紀錄
- 如果有調整 composer.json 的話,記得執行 composer clearcache 清除資料
參考
https://dudi.dev/composer-private-packages-github-repository
https://getcomposer.org/doc/03-cli.md
https://getcomposer.org/doc/05-repositories.md
https://packagist.com/
https://stackoverflow.com/questions/40619393/how-to-add-private-github-repository-as-composer-dependency