Composer 简介 #
什么是 Composer? #
Composer 是 PHP 的依赖管理工具。它允许你声明项目所依赖的库,并为你管理(安装/更新)它们。Composer 不是传统意义上的包管理器,而是依赖管理器,它会在项目中安装项目依赖的库,而不是全局安装。
核心特点 #
| 特点 | 说明 |
|---|---|
| 依赖管理 | 自动解析和安装项目依赖 |
| 版本约束 | 灵活的版本约束语法 |
| 自动加载 | 内置 PSR-4 自动加载支持 |
| 项目隔离 | 每个项目独立管理依赖 |
| 社区生态 | 庞大的 Packagist 包仓库 |
为什么使用 Composer? #
传统 PHP 开发的痛点 #
传统 PHP 开发存在以下问题:
php
// 手动下载和管理库文件
require_once 'vendor/monolog/src/Monolog/Logger.php';
require_once 'vendor/monolog/src/Monolog/Handler/StreamHandler.php';
require_once 'vendor/guzzle/src/Guzzle/Client.php';
// ... 更多 require_once
// 版本管理困难
// 不知道依赖的具体版本
// 依赖之间的冲突难以解决
// 更新依赖需要手动下载替换
Composer 的解决方案 #
php
// composer.json
{
"require": {
"monolog/monolog": "^2.0",
"guzzlehttp/guzzle": "^7.0"
}
}
// 自动加载所有依赖
require 'vendor/autoload.php';
// 直接使用
$logger = new Monolog\Logger('app');
$client = new GuzzleHttp\Client();
Composer 的历史 #
text
2011年 ─── Nils Adermann 和 Jordi Boggiano 开始开发
│
│ 解决 PHP 依赖管理问题
│
2012年 ─── Composer 1.0 正式发布
│
│ 迅速成为 PHP 标准工具
│ Packagist 仓库上线
│
2013年 ─── Laravel、Symfony 等框架采用
│
│ 推动了 Composer 的普及
│
2017年 ─── Composer 1.5 发布
│
│ 性能优化、新特性
│
2020年 ─── Composer 2.0 发布
│
│ 重大性能提升
│ 新的依赖解析算法
│
至今 ─── PHP 生态系统的核心工具
安装 Composer #
方式一:Windows 安装 #
使用安装程序(推荐) #
- 下载 Composer-Setup.exe
- 运行安装程序,会自动找到 PHP 安装路径
- 添加到系统 PATH,可在任意目录使用
手动安装 #
powershell
# 下载安装脚本
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# 验证安装脚本(可选)
php -r "if (hash_file('sha384', 'composer-setup.php') === file_get_contents('https://composer.github.io/installer.sig')) { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
# 运行安装
php composer-setup.php
# 删除安装脚本
php -r "unlink('composer-setup.php');"
# 移动到全局路径
move composer.phar C:\composer\composer.phar
创建 C:\composer\composer.bat:
batch
@echo off
php "%~dp0composer.phar" %*
方式二:macOS 安装 #
使用 Homebrew(推荐) #
bash
# 安装 Composer
brew install composer
# 验证安装
composer --version
手动安装 #
bash
# 下载并安装
curl -sS https://getcomposer.org/installer | php
# 移动到全局路径
sudo mv composer.phar /usr/local/bin/composer
# 添加执行权限
sudo chmod +x /usr/local/bin/composer
# 验证安装
composer --version
方式三:Linux 安装 #
Debian/Ubuntu #
bash
# 更新包列表
sudo apt update
# 安装 PHP CLI 和依赖
sudo apt install php-cli php-mbstring php-xml php-curl unzip
# 下载 Composer
curl -sS https://getcomposer.org/installer -o composer-setup.php
# 安装到全局
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
# 验证安装
composer --version
CentOS/RHEL #
bash
# 安装 EPEL 仓库
sudo yum install epel-release
# 安装 PHP 和依赖
sudo yum install php-cli php-mbstring php-xml php-json unzip
# 下载并安装 Composer
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer
# 验证安装
composer --version
方式四:Docker 环境 #
dockerfile
# 使用官方 Composer 镜像
FROM composer:2
# 或在 PHP 镜像中安装
FROM php:8.1-cli
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
bash
# 使用 Docker 运行 Composer
docker run --rm -v $(pwd):/app composer:2 install
验证安装 #
bash
# 查看版本
composer --version
# 输出: Composer version 2.6.5 2023-10-06 10:11:52
# 查看帮助
composer --help
# 查看配置
composer config -g -l
配置 Composer #
配置国内镜像(中国用户推荐) #
bash
# 全局配置(推荐)
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
# 项目级配置
composer config repo.packagist composer https://mirrors.aliyun.com/composer/
# 恢复官方源
composer config -g --unset repos.packagist
常用镜像源 #
| 镜像源 | 地址 |
|---|---|
| 阿里云 | https://mirrors.aliyun.com/composer/ |
| 腾讯云 | https://mirrors.cloud.tencent.com/composer/ |
| 华为云 | https://repo.huaweicloud.com/repository/php/ |
| Packagist 官方 | https://repo.packagist.org |
配置文件位置 #
| 类型 | 位置 | 说明 |
|---|---|---|
| 全局配置 | ~/.composer/config.json |
所有项目共享 |
| 项目配置 | 项目目录/composer.json |
仅当前项目 |
| 环境变量 | COMPOSER_HOME |
Composer 主目录 |
常用配置项 #
bash
# 设置进程超时时间
composer config -g process-timeout 2000
# 设置缓存目录
composer config -g cache-dir /path/to/cache
# 设置 GitHub OAuth Token
composer config -g github-oauth.github.com your-token
# 开启优化自动加载
composer config -g optimize-autoloader true
基本概念 #
composer.json #
项目配置文件,定义项目的基本信息和依赖:
json
{
"name": "my/project",
"description": "My PHP project",
"type": "project",
"license": "MIT",
"authors": [
{
"name": "Your Name",
"email": "you@example.com"
}
],
"require": {
"php": "^8.1",
"monolog/monolog": "^2.0"
}
}
composer.lock #
锁定文件,记录实际安装的依赖版本:
json
{
"content-hash": "abc123...",
"packages": [
{
"name": "monolog/monolog",
"version": "2.9.2",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
"reference": "e3798b..."
}
}
]
}
vendor 目录 #
依赖安装目录,包含所有下载的包:
text
vendor/
├── autoload.php # 自动加载入口
├── composer/ # Composer 相关文件
│ ├── autoload_classmap.php
│ ├── autoload_namespaces.php
│ ├── autoload_psr4.php
│ └── installed.json
├── monolog/ # 安装的包
│ └── monolog/
└── psr/ # 另一个包
└── log/
第一个 Composer 项目 #
创建新项目 #
bash
# 创建项目目录
mkdir my-project
cd my-project
# 初始化 composer.json
composer init
交互式初始化:
text
Welcome to the Composer config generator
This command will guide you through creating your composer.json config.
Package name (<vendor>/<name>) [user/my-project]: my/project
Description []: My first Composer project
Author [Your Name <you@example.com>]:
Minimum Stability []: stable
License []: MIT
Define your dependencies.
Would you like to define your dependencies (require) interactively [yes]? yes
Search for a package: monolog/monolog
Enter the version constraint to require (or leave blank to use the latest version): ^2.0
Search for a package:
Would you like to define your dev dependencies (require-dev) interactively [yes]? no
{
"name": "my/project",
"description": "My first Composer project",
"license": "MIT",
"require": {
"monolog/monolog": "^2.0"
}
}
Do you confirm generation [yes]? yes
手动创建 composer.json #
json
{
"name": "my/project",
"description": "My first Composer project",
"type": "project",
"license": "MIT",
"authors": [
{
"name": "Your Name",
"email": "you@example.com"
}
],
"require": {
"php": "^8.1",
"monolog/monolog": "^2.0"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
安装依赖 #
bash
# 安装所有依赖
composer install
# 或简写
composer i
使用依赖 #
创建 index.php:
php
<?php
require 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// 创建日志实例
$log = new Logger('my-app');
$log->pushHandler(new StreamHandler('app.log', Logger::DEBUG));
// 记录日志
$log->info('Hello, Composer!');
$log->error('Something went wrong!');
运行:
bash
php index.php
Composer 版本对比 #
Composer 1.x vs 2.x #
| 特性 | Composer 1.x | Composer 2.x |
|---|---|---|
| 性能 | 基准 | 提升 2-3 倍 |
| 并行下载 | ❌ | ✅ |
| 依赖解析 | 慢 | 快 |
| 内存占用 | 高 | 低 |
| PHP 版本 | 5.3+ | 7.2+ |
升级到 Composer 2 #
bash
# 自我更新到最新版本
composer self-update
# 更新到指定版本
composer self-update --2
# 回退到 1.x
composer self-update --1
# 查看当前版本
composer --version
开发工具支持 #
VS Code 插件 #
- PHP Intelephense:PHP 智能提示
- Composer:Composer 命令支持
- PHP Debug:PHP 调试支持
PhpStorm 支持 #
PhpStorm 内置 Composer 支持:
- 自动识别 composer.json
- 依赖管理面板
- 自动加载支持
- 包搜索和安装
命令行补全 #
bash
# Bash
curl -sS https://getcomposer.org/composer-stable.phar -o /usr/local/bin/composer
source <(composer completion bash)
# Zsh
source <(composer completion zsh)
# Fish
composer completion fish | source
常见问题 #
1. 内存不足错误 #
bash
# 临时增加内存限制
php -d memory_limit=-1 /usr/local/bin/composer install
# 或设置环境变量
COMPOSER_MEMORY_LIMIT=-1 composer install
2. 超时错误 #
bash
# 增加超时时间
composer config -g process-timeout 2000
# 或使用环境变量
COMPOSER_PROCESS_TIMEOUT=2000 composer install
3. 权限问题 #
bash
# 修改 vendor 目录权限
sudo chown -R $USER:$USER vendor/
# 或修改缓存目录权限
sudo chown -R $USER:$USER ~/.composer/
4. SSL 证书问题 #
bash
# 禁用 SSL 验证(不推荐)
composer config -g -- disable-tls true
composer config -g -- secure-http false
# 正确做法:配置 CA 证书
composer config -g cafile /path/to/cacert.pem
下一步 #
现在你已经了解了 Composer 的基本概念和安装方法,接下来学习 基本使用 开始实际操作!
最后更新:2026-03-28