Composer 是 PHP 的依賴管理工具:在專案裡宣告需要哪些函式庫與版本範圍,Composer 會下載套件到 vendor/,並產生 vendor/autoload.php 讓你不必手動 require 每個檔案。現代 PHP 專案(Laravel、Symfony、WordPress 外掛開發)幾乎都離不開它。
這篇從「Composer 是什麼」出發,帶你完成安裝、建立專案、讀懂 composer.json/composer.lock,以及 PSR-4 自動載入設定。
指令速查
| 指令 | 用途 |
|---|---|
composer init | 互動式建立 composer.json |
composer require vendor/package | 新增依賴並安裝 |
composer require --dev vendor/package | 新增開發用依賴 |
composer install | 依 composer.lock 安裝(部署/CI 用這個) |
composer update | 重新解析並更新 lock 檔 |
composer remove vendor/package | 移除依賴 |
composer dump-autoload | 重建自動載入器 |
composer show | 列出已安裝套件 |
composer validate | 檢查設定檔格式 |
目錄
Composer 解決什麼問題?
手動 require 檔案就像點餐時每道菜都要自己去廚房端——專案一大很快就亂掉。Composer 做兩件事:
- 管理依賴:解析版本相容性,下載套件與其子依賴到
vendor/ - 自動載入:產生 autoloader,PHP 只要
require 'vendor/autoload.php'就能用已安裝的類別
注意:Composer 管理的是每個專案自己的依賴,不是全機共用。不同專案可以用不同版本的同一套件。
安裝 Composer
先確認有 PHP,再依 Composer 官方安裝說明 操作。macOS 用 Homebrew:
brew install composer
composer --version尚未安裝 Homebrew?可看 Homebrew 教學。
建立第一個 Composer 專案
初始化
composer init或直接新增套件(會自動建立/更新 composer.json):
composer require monolog/monolog執行後 Composer 會更新 composer.json、解析依賴、建立或更新 composer.lock,並安裝到 vendor/。
在 PHP 中載入
<?php
require __DIR__ . '/vendor/autoload.php';
__DIR__ 代表目前檔案所在目錄,比依賴工作目錄更穩定。
composer.json 常見欄位
{
"name": "vendor/project",
"description": "專案描述",
"type": "project",
"require": {
"monolog/monolog": "^3.0"
},
"require-dev": {
"phpunit/phpunit": "^11.0"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"scripts": {
"test": "phpunit"
}
}| 欄位 | 說明 |
|---|---|
require | 正式執行需要的依賴 |
require-dev | 測試、靜態分析等開發依賴 |
autoload | PSR-4 等自動載入規則 |
scripts | 自訂指令,如 composer test |
正式專案不要用 * 當版本約束;讓 Composer 寫入 lock 檔固定實際版本。完整欄位見 composer.json schema。
PSR-4 自動載入
Composer 是工具;PSR-4 是命名空間對應檔案路徑的規範。兩者常一起用,但職責不同。
專案結構:
project/
├── composer.json
├── src/
│ └── Controllers/
│ └── UserController.php
└── public/
└── index.phpcomposer.json:
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}App\Controllers\UserController 對應 src/Controllers/UserController.php:
<?php
namespace App\Controllers;
class UserController
{
public function index(): string
{
return 'Hello, Composer!';
}
}
修改 autoload 後執行:
composer dump-autoloadcomposer.lock 要不要提交?
| 專案類型 | 建議 |
|---|---|
| 應用程式(網站、API) | ✅ 提交 lock 檔,確保團隊與部署環境安裝相同版本 |
| 可供安裝的函式庫 | 通常不提交,讓使用者依自己的 composer.json 解析 |
不要把 vendor/ 當版本紀錄——composer.json 描述需求,composer.lock 固定結果。
實用工作流程
新專案:
composer init
composer require vendor/package從 Git 拉下專案:
composer install有計畫地更新依賴:
composer update
composer validate掌握分工後:composer.json 描述需求,composer.lock 固定結果,vendor/autoload.php 把類別帶進來。
常見問題
Q:Composer 和 npm 一樣嗎?
A:概念類似,都是專案級依賴管理。Composer 管 PHP 套件(Packagist),npm 管 JavaScript 套件。
Q:install 和 update 差在哪?
A:install 依 lock 檔安裝固定版本;update 重新解析並更新 lock。部署用 install,刻意升級才用 update。
Q:找不到套件怎麼辦?
A:到 Packagist 搜尋正確的 vendor/package 名稱。常見拼字錯誤:comperser、composser。
Q:和 PHP 類別入門 什麼關係?
A:學會 class 之後,Composer 的 PSR-4 讓你把類別放在 src/ 而不用手動 require 每個檔案。
