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
composer search #
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