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 安装 #

使用安装程序(推荐) #

  1. 下载 Composer-Setup.exe
  2. 运行安装程序,会自动找到 PHP 安装路径
  3. 添加到系统 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