PHP Composer常用命令详解

PHP Composer常用命令详解

前言

Composer是PHP的依赖管理工具,它允许开发者声明项目所依赖的库,并自动安装这些依赖。掌握Composer的常用命令对于PHP开发者来说至关重要。本文将详细介绍Composer的常用命令及其使用场景,帮助您更高效地管理PHP项目依赖。

一、Composer基础命令

1. 安装Composer

全局安装(推荐)

1
2
3
4
5
6
# Linux/macOS
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

# Windows
# 下载Composer-Setup.exe并安装

局部安装

1
2
curl -sS https://getcomposer.org/installer | php
php composer.phar [命令]

2. 检查Composer版本

1
2
composer --version
composer -V

3. 更新Composer

1
2
3
4
composer self-update
composer self-update --rollback # 回滚到上一个版本
composer self-update --preview # 更新到预览版
composer self-update --stable # 更新到稳定版

二、项目初始化与依赖管理

1. 创建新项目

1
2
3
4
5
6
# 基于现有包创建新项目
composer create-project laravel/laravel my-laravel-app
composer create-project symfony/skeleton my-symfony-app "6.3.*"

# 指定版本
composer create-project --prefer-dist laravel/laravel blog "8.*"

2. 初始化现有项目

1
2
3
4
5
# 在现有项目目录中创建composer.json
composer init

# 交互式创建composer.json
composer init --name="vendor/project" --description="项目描述" --author="作者 <email@example.com>"

3. 安装依赖

1
2
3
4
5
6
7
8
# 安装composer.json中定义的所有依赖
composer install

# 安装开发依赖
composer install --dev

# 优化自动加载(生产环境推荐)
composer install --no-dev --optimize-autoloader

4. 更新依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 更新所有依赖
composer update

# 更新指定包
composer update vendor/package

# 更新多个包
composer update vendor/package1 vendor/package2

# 只更新主要版本
composer update --prefer-stable

# 更新到最新版本(包括不稳定版本)
composer update --prefer-lowest

5. 添加新依赖

1
2
3
4
5
6
7
8
9
10
11
12
# 添加最新稳定版
composer require vendor/package

# 添加指定版本
composer require vendor/package:^1.0
composer require vendor/package:~1.2.3

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

# 添加多个包
composer require vendor/package1 vendor/package2

6. 移除依赖

1
2
3
4
5
6
7
8
# 移除包
composer remove vendor/package

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

# 移除多个包
composer remove vendor/package1 vendor/package2

三、依赖查询与信息

1. 搜索包

1
2
3
4
5
# 搜索包
composer search monolog

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

2. 显示包信息

1
2
3
4
5
6
7
8
9
10
11
# 显示包详细信息
composer show monolog/monolog

# 显示已安装的包
composer show --installed

# 显示树形结构的依赖关系
composer show --tree

# 显示所有可用包
composer show --all

3. 检查过时依赖

1
2
3
4
5
6
7
8
# 检查所有过时的依赖
composer outdated

# 检查直接依赖
composer outdated --direct

# 检查开发依赖
composer outdated --dev

四、自动加载管理

1. 生成自动加载文件

1
2
3
4
5
6
7
8
9
10
11
# 生成自动加载文件
composer dump-autoload

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

# 生成类映射(提高性能)
composer dump-autoload --classmap-authoritative

# 生成APCu缓存
composer dump-autoload --apcu

2. 自动加载配置

composer.json中配置自动加载:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"autoload": {
"psr-4": {
"App\\": "src/",
"MyProject\\": "lib/"
},
"psr-0": {
"LegacyNamespace_": "src/"
},
"classmap": [
"src/",
"lib/"
],
"files": [
"src/helpers.php"
]
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
}
}

五、脚本与生命周期

1. 运行脚本

1
2
3
4
5
6
7
8
# 运行定义的脚本
composer run-script script-name

# 列出所有脚本
composer run-script --list

# 运行安装后脚本
composer run-script post-install-cmd

2. 定义脚本

composer.json中定义脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"scripts": {
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-update-cmd": [
"php artisan clear-compiled"
],
"post-create-project-cmd": [
"php artisan key:generate"
],
"custom-script": [
"echo 'Running custom script'",
"php scripts/custom.php"
]
}
}

六、全局命令

1. 全局安装包

1
2
3
4
5
6
7
8
# 全局安装包
composer global require friendsofphp/php-cs-fixer

# 全局更新包
composer global update

# 全局移除包
composer global remove friendsofphp/php-cs-fixer

2. 全局包管理

1
2
3
4
5
6
7
8
# 列出全局安装的包
composer global show

# 显示全局包信息
composer global show friendsofphp/php-cs-fixer

# 更新全局Composer
composer global self-update

七、诊断与调试

1. 诊断命令

1
2
3
4
5
6
7
8
9
10
11
# 诊断Composer环境
composer diagnose

# 验证composer.json
composer validate

# 检查安全漏洞
composer audit

# 检查平台要求
composer check-platform-reqs

2. 调试选项

1
2
3
4
5
6
7
8
# 详细输出
composer install -vvv

# 显示内存使用情况
composer install --profile

# 显示执行时间
composer install --profile --timing

八、配置管理

1. 查看配置

1
2
3
4
5
6
7
8
# 显示所有配置
composer config --list

# 显示特定配置
composer config repositories

# 显示全局配置
composer config --global --list

2. 设置配置

1
2
3
4
5
6
7
8
# 设置配置
composer config process-timeout 600

# 设置全局配置
composer config --global github-oauth.github.com your-token

# 设置仓库
composer config repositories.example composer https://example.org/packages/

3. 常用配置项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"config": {
"process-timeout": 600,
"use-include-path": false,
"preferred-install": "dist",
"optimize-autoloader": true,
"sort-packages": true,
"platform": {
"php": "8.1.0"
},
"github-protocols": ["https", "ssh"],
"github-oauth": {
"github.com": "your-github-token"
}
}
}

九、仓库管理

1. 添加仓库

1
2
3
4
5
6
7
8
# 添加Composer仓库
composer config repositories.example composer https://example.org/packages/

# 添加VCS仓库
composer config repositories.example vcs https://github.com/example/repo.git

# 添加PEAR仓库
composer config repositories.example pear https://pear.example.org

2. 在composer.json中配置仓库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"repositories": [
{
"type": "composer",
"url": "https://example.org/packages/"
},
{
"type": "vcs",
"url": "https://github.com/example/repo.git"
},
{
"type": "pear",
"url": "https://pear.example.org"
},
{
"type": "package",
"package": {
"name": "vendor/custom-package",
"version": "1.0.0",
"dist": {
"url": "https://example.org/custom-package.zip",
"type": "zip"
}
}
}
]
}

十、实用技巧与最佳实践

1. 版本约束

1
2
3
4
5
6
7
8
9
10
11
12
{
"require": {
"vendor/package": "1.0.0", // 精确版本
"vendor/package": ">=1.0.0", // 大于等于1.0.0
"vendor/package": "~1.2.3", // ~1.2.3 >=1.2.3 <1.3.0
"vendor/package": "^1.2.3", // ^1.2.3 >=1.2.3 <2.0.0
"vendor/package": "1.0.*", // 通配符
"vendor/package": "~1.0", // ~1.0 >=1.0 <2.0
"vendor/package": "dev-master", // 开发分支
"vendor/package": "@stable" // 稳定版本
}
}

2. 生产环境优化

1
2
3
4
5
6
7
8
# 生产环境安装
composer install --no-dev --optimize-autoloader --no-interaction

# 清理缓存
composer clear-cache

# 清除composer.lock并重新安装
rm composer.lock && composer install

3. 常见问题解决

1
2
3
4
5
6
7
8
9
# 内存不足错误
php -d memory_limit=512M composer install

# SSL证书问题
composer config --global secure-http false

# 代理设置
composer config --global http-proxy http://proxy.example.com:8080
composer config --global https-proxy https://proxy.example.com:8443

十一、Composer.json完整示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
{
"name": "vendor/project",
"description": "项目描述",
"type": "project",
"keywords": ["keyword1", "keyword2"],
"license": "MIT",
"authors": [
{
"name": "作者姓名",
"email": "author@example.com",
"homepage": "https://example.com",
"role": "Developer"
}
],
"require": {
"php": "^8.0",
"ext-json": "*",
"monolog/monolog": "^2.0",
"symfony/console": "^5.0"
},
"require-dev": {
"phpunit/phpunit": "^9.0",
"squizlabs/php_codesniffer": "^3.0"
},
"autoload": {
"psr-4": {
"App\\": "src/",
"Tests\\": "tests/"
},
"classmap": [
"database/seeds",
"database/factories"
],
"files": [
"src/helpers.php"
]
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"scripts": {
"post-install-cmd": [
"@php artisan clear-compiled",
"@php artisan optimize"
],
"post-update-cmd": [
"@php artisan clear-compiled"
],
"post-create-project-cmd": [
"@php artisan key:generate"
],
"test": "phpunit",
"cs-check": "php-cs-fixer fix --dry-run --diff",
"cs-fix": "php-cs-fixer fix"
},
"config": {
"optimize-autoloader": true,
"preferred-install": "dist",
"sort-packages": true,
"process-timeout": 600
},
"repositories": [
{
"type": "composer",
"url": "https://packages.example.com"
}
],
"minimum-stability": "stable",
"prefer-stable": true
}