Composer 基本使用 #

命令概览 #

Composer 提供了丰富的命令来管理 PHP 项目的依赖:

命令 说明 常用程度
install 安装依赖 ⭐⭐⭐⭐⭐
update 更新依赖 ⭐⭐⭐⭐⭐
require 添加依赖 ⭐⭐⭐⭐⭐
remove 移除依赖 ⭐⭐⭐⭐
init 初始化项目 ⭐⭐⭐
create-project 创建项目 ⭐⭐⭐⭐
dump-autoload 重新生成自动加载 ⭐⭐⭐⭐
show 查看包信息 ⭐⭐⭐
search 搜索包 ⭐⭐⭐
validate 验证配置 ⭐⭐

安装依赖 #

composer install #

install 命令用于安装 composer.json 中定义的所有依赖:

bash
# 安装所有依赖
composer install

# 简写形式
composer i

# 只安装生产依赖(跳过 require-dev)
composer install --no-dev

# 优化自动加载
composer install --optimize-autoloader

# 生产环境推荐
composer install --no-dev --optimize-autoloader

install vs update #

命令 作用 composer.lock 使用场景
install 按锁定文件安装 读取,不修改 部署、团队协作
update 更新到最新版本 更新 开发环境更新依赖
bash
# install 流程
1. 检查 composer.lock 是否存在
2. 如果存在,按锁定版本安装
3. 如果不存在,解析依赖并生成 lock 文件

# update 流程
1. 解析 composer.json 中的版本约束
2. 获取最新兼容版本
3. 更新 composer.lock

安装流程详解 #

text
composer install
    │
    ├── 检查 composer.lock
    │   ├── 存在 → 按锁定版本安装
    │   └── 不存在 → 解析依赖并生成
    │
    ├── 下载包到缓存
    │   └── ~/.composer/cache/files/
    │
    ├── 解压到 vendor 目录
    │   └── vendor/package-name/
    │
    ├── 生成自动加载文件
    │   └── vendor/autoload.php
    │
    └── 执行 post-install 脚本

更新依赖 #

composer update #

update 命令用于更新依赖到最新兼容版本:

bash
# 更新所有依赖
composer update

# 简写形式
composer u

# 更新特定包
composer update monolog/monolog

# 更新多个包
composer update monolog/monolog guzzlehttp/guzzle

# 使用通配符更新
composer update monolog/*

# 只更新开发依赖
composer update --dev

# 只更新生产依赖
composer update --no-dev

# 优化自动加载
composer update --optimize-autoloader

部分更新 #

bash
# 只更新某个包,不更新其他依赖
composer update monolog/monolog --with-dependencies

# 只更新直接依赖
composer update --prefer-lowest

添加依赖 #

composer require #

require 命令用于添加新的依赖:

bash
# 添加依赖
composer require monolog/monolog

# 添加多个依赖
composer require monolog/monolog guzzlehttp/guzzle

# 添加开发依赖
composer require --dev phpunit/phpunit

# 指定版本
composer require monolog/monolog:^2.0

# 添加时更新自动加载
composer require monolog/monolog --update-with-dependencies

交互式添加 #

bash
composer require
# 输入包名搜索
# 选择版本
# 确认安装

require 流程 #

text
composer require package/name
    │
    ├── 解析包名和版本
    │
    ├── 搜索 Packagist
    │   └── 找到最佳版本
    │
    ├── 更新 composer.json
    │   └── 添加到 require
    │
    ├── 解析依赖关系
    │   └── 递归解析子依赖
    │
    ├── 下载并安装
    │   └── 写入 vendor/
    │
    ├── 更新 composer.lock
    │
    └── 重新生成 autoload

移除依赖 #

composer remove #

remove 命令用于移除不再需要的依赖:

bash
# 移除依赖
composer remove monolog/monolog

# 移除多个依赖
composer remove monolog/monolog guzzlehttp/guzzle

# 移除开发依赖
composer remove --dev phpunit/phpunit

# 移除后更新依赖
composer remove monolog/monolog --update-with-dependencies

版本约束 #

版本约束语法 #

Composer 支持多种版本约束语法:

约束 说明 示例
精确版本 指定具体版本 1.2.3
范围版本 版本范围 >=1.0 <2.0
波浪号 允许补丁更新 ~1.2.3
插入号 兼容版本更新 ^1.2.3
通配符 任意版本 1.2.*
或逻辑 多个约束 `>=1.0 <1.1

精确版本 #

json
{
    "require": {
        "monolog/monolog": "1.2.3"
    }
}

范围版本 #

json
{
    "require": {
        "monolog/monolog": ">=1.0",
        "guzzlehttp/guzzle": ">=1.0 <2.0",
        "symfony/console": ">=1.0,<=2.0"
    }
}

波浪号约束 (~) #

波浪号允许补丁级别更新:

json
{
    "require": {
        "monolog/monolog": "~1.2.3"
    }
}

解释:

  • ~1.2.3 等价于 >=1.2.3 <1.3.0
  • ~1.2 等价于 >=1.2.0 <2.0.0
  • ~0.3 等价于 >=0.3.0 <0.4.0

插入号约束 (^) #

插入号遵循语义化版本,允许兼容更新:

json
{
    "require": {
        "monolog/monolog": "^1.2.3"
    }
}

解释:

  • ^1.2.3 等价于 >=1.2.3 <2.0.0
  • ^0.3.2 等价于 >=0.3.2 <0.4.0
  • ^0.0.3 等价于 >=0.0.3 <0.0.4

版本约束最佳实践 #

json
{
    "require": {
        "php": "^8.1",
        "laravel/framework": "^10.0",
        "monolog/monolog": "^2.0",
        "guzzlehttp/guzzle": "^7.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^10.0",
        "mockery/mockery": "^1.0"
    }
}

稳定性标志 #

json
{
    "require": {
        "monolog/monolog": "dev-master",
        "some/package": "1.0.0-beta"
    },
    "minimum-stability": "stable",
    "prefer-stable": true
}

创建项目 #

composer create-project #

create-project 命令用于从现有包创建新项目:

bash
# 创建新项目
composer create-project laravel/laravel my-app

# 指定版本
composer create-project laravel/laravel:^10.0 my-app

# 指定目录
composer create-project laravel/laravel my-app --directory=/path/to/project

# 保留版本控制
composer create-project laravel/laravel my-app --keep-vcs

# 跳过开发依赖
composer create-project laravel/laravel my-app --no-dev

常用项目模板 #

bash
# Laravel
composer create-project laravel/laravel my-app

# Symfony
composer create-project symfony/skeleton my-app
composer create-project symfony/website-skeleton my-app

# Yii2
composer create-project yiisoft/yii2-app-basic my-app
composer create-project yiisoft/yii2-app-advanced my-app

# CodeIgniter
composer create-project codeigniter4/appstarter my-app

# Slim
composer create-project slim/slim-skeleton my-app

# Lumen
composer create-project laravel/lumen my-app

自动加载 #

composer dump-autoload #

dump-autoload 命令用于重新生成自动加载文件:

bash
# 重新生成自动加载
composer dump-autoload

# 简写
composer dump

# 优化自动加载(生产环境推荐)
composer dump-autoload --optimize

# 静态优化(更快)
composer dump-autoload --optimize --apcu

# 开发模式
composer dump-autoload --dev

使用自动加载 #

php
<?php
// 引入自动加载文件
require 'vendor/autoload.php';

// 直接使用类
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

$log = new Logger('app');
$log->pushHandler(new StreamHandler('app.log'));

查看信息 #

composer show #

show 命令用于查看已安装包的信息:

bash
# 查看所有已安装的包
composer show

# 查看特定包信息
composer show monolog/monolog

# 查看包的所有版本
composer show monolog/monolog --all

# 查看包的依赖
composer show monolog/monolog --tree

# 查看过时的包
composer show --outdated

# 只查看直接依赖
composer show --direct

# 查看包的自动加载信息
composer show monolog/monolog --autoload

search 命令用于搜索 Packagist 上的包:

bash
# 搜索包
composer search log

# 只搜索包名
composer search log --only-name

# 搜索类型
composer search log --type=library

composer outdated #

outdated 命令用于查看可更新的包:

bash
# 查看过时的包
composer outdated

# 显示所有包(包括最新的)
composer outdated --all

# 直接依赖
composer outdated --direct

# 输出 JSON 格式
composer outdated --format=json

验证与诊断 #

composer validate #

validate 命令用于验证 composer.json 的有效性:

bash
# 验证 composer.json
composer validate

# 严格模式
composer validate --strict

# 检查版本号
composer validate --no-check-version

composer diagnose #

diagnose 命令用于诊断 Composer 问题:

bash
# 运行诊断
composer diagnose

# 输出示例
Checking composer.json: OK
Checking platform settings: OK
Checking git settings: OK
Checking http connectivity to packagist: OK
Checking https connectivity to packagist: OK
Checking github.com rate limit: OK

全局命令 #

全局安装包 #

bash
# 全局安装包(可用于命令行工具)
composer global require laravel/installer

# 全局更新
composer global update

# 全局移除
composer global remove laravel/installer

# 查看全局安装的包
composer global show

全局配置 #

bash
# 全局配置镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

# 查看全局配置
composer config -g -l

# 设置全局目录
composer config -g home ~/.composer

命令选项 #

通用选项 #

选项 说明
--verbose (-v) 增加输出详细程度
--help (-h) 显示帮助信息
--quiet (-q) 静默模式
--no-interaction (-n) 非交互模式
--no-plugins 禁用插件
--no-scripts 跳过脚本执行
--profile 显示执行时间
--working-dir (-d) 指定工作目录

安装选项 #

选项 说明
--prefer-source 优先从源码安装
--prefer-dist 优先从压缩包安装
--no-dev 跳过开发依赖
--no-progress 不显示进度条
--optimize-autoloader (-o) 优化自动加载
--classmap-authoritative (-a) 权威类映射

实用技巧 #

1. 加速安装 #

bash
# 使用国内镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

# 使用进程并行下载(Composer 2.x 默认开启)
# 优化自动加载
composer install --optimize-autoloader

# 使用缓存
composer install --prefer-dist

2. 生产环境部署 #

bash
# 推荐的生产环境安装命令
composer install \
    --no-dev \
    --optimize-autoloader \
    --no-interaction \
    --no-progress \
    --prefer-dist

3. 版本回退 #

bash
# 查看历史版本
composer show monolog/monolog --all

# 安装特定版本
composer require monolog/monolog:2.8.0

4. 清理缓存 #

bash
# 清理缓存
composer clear-cache

# 或
composer clearcache

5. 自我更新 #

bash
# 更新 Composer 本身
composer self-update

# 更新到指定版本
composer self-update 2.6.5

# 回退到上一个版本
composer self-update --rollback

# 更新到预览版本
composer self-update --preview

常见问题 #

1. 版本冲突 #

bash
# 查看依赖树
composer show -t

# 查看冲突
composer prohibits vendor/package

# 强制更新
composer update --with-all-dependencies

2. 内存不足 #

bash
# 临时增加内存
COMPOSER_MEMORY_LIMIT=-1 composer update

3. 锁文件冲突 #

bash
# 删除锁文件重新安装
rm composer.lock
rm -rf vendor/
composer install

下一步 #

现在你已经掌握了 Composer 的基本使用方法,接下来学习 依赖管理详解 深入了解 composer.json 的配置!

最后更新:2026-03-28