Composer是PHP的依赖管理工具,类似于Node.js的npm、Python的pip、Ruby的bundler。它可以帮你管理项目中的依赖库,自动下载、安装、更新依赖,解决依赖之间的版本冲突。

在Composer出现之前,PHP项目管理依赖是一件很麻烦的事情。你需要手动下载第三方库,放到项目目录中,手动引入,手动更新。如果一个项目依赖很多库,或者库之间有版本依赖,管理起来会非常混乱。

Composer的出现,彻底改变了PHP项目的依赖管理方式。现在,几乎所有的PHP项目都在使用Composer管理依赖,PHP的生态也因为Composer而变得更加繁荣。

今天分享Composer的使用教程,从安装到基本使用,再到进阶技巧,帮你掌握这个PHP开发必备的工具。

Composer的安装

Windows安装

在Windows上安装Composer,有两种方式:

方式一:使用安装程序(推荐)

  1. 下载Composer-Setup.exe:https://getcomposer.org/Composer-Setup.exe
  2. 运行安装程序,按照提示一步步安装
  3. 安装程序会自动配置环境变量,安装完成后就可以在命令行使用composer命令了

方式二:手动安装

  1. 下载composer.phar:https://getcomposer.org/composer.phar
  2. 把composer.phar放到PHP目录下
  3. 在PHP目录下新建composer.bat文件,内容为:

`` @php "%~dp0composer.phar" %* ``

  1. 把PHP目录添加到系统环境变量PATH中
  2. 打开命令行,输入composer --version,验证安装是否成功

Linux/Mac安装

在Linux/Mac上安装Composer,可以用以下命令:

# 下载composer.phar
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

# 验证安装脚本(可选,但推荐)
php -r "if (hash_file('SHA384', 'composer-setup.php') === '安装脚本的SHA384哈希') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

# 运行安装脚本
php composer-setup.php

# 删除安装脚本
php -r "unlink('composer-setup.php');"

# 全局安装(可选)
sudo mv composer.phar /usr/local/bin/composer

安装完成后,输入composer --version,如果显示版本号,说明安装成功。

验证安装

打开命令行,输入:

composer --version

如果显示类似Composer version 1.x.x的信息,说明安装成功。

Composer的基本使用

1. 初始化项目

在项目根目录下,运行:

composer init

这个命令会交互式地引导你创建composer.json文件,包括项目名称、描述、作者、依赖等信息。你也可以直接手动创建composer.json文件。

一个简单的composer.json示例:

{
    "name": "yourname/myproject",
    "description": "My PHP project",
    "type": "project",
    "require": {
        "php": ">=7.0",
        "monolog/monolog": "^1.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    },
    "authors": [
        {
            "name": "Your Name",
            "email": "your@email.com"
        }
    ]
}

2. 安装依赖

在项目根目录下,运行:

composer install

这个命令会读取composer.json文件,下载所有依赖,安装到vendor目录下,并生成composer.lock文件(锁定依赖版本)。

如果是第一次安装,没有composer.lock文件,Composer会根据composer.json中的版本约束,解析依赖,下载最新的符合版本约束的版本,并生成composer.lock文件。

如果已经有composer.lock文件,Composer会按照composer.lock中锁定的版本安装,确保所有开发者使用相同版本的依赖。

3. 添加依赖

添加一个新的依赖,可以用:

composer require 包名

例如,添加monolog日志库:

composer require monolog/monolog

这个命令会自动更新composer.json和composer.lock文件,并下载安装依赖。

也可以指定版本:

composer require monolog/monolog:^1.0

添加开发依赖(只在开发环境使用,如测试工具、代码检查工具):

composer require --dev phpunit/phpunit

4. 更新依赖

更新所有依赖到最新版本(符合composer.json中的版本约束):

composer update

更新指定的依赖:

composer update monolog/monolog

注意:composer update会更新composer.lock文件,而composer install不会。在生产环境,应该用composer install,确保使用锁定的版本,避免因为依赖更新导致问题。

5. 移除依赖

移除一个依赖:

composer remove monolog/monolog

这个命令会自动更新composer.json和composer.lock文件,并删除依赖。

6. 查看依赖

查看项目的所有依赖:

composer show

查看指定依赖的详细信息:

composer show monolog/monolog

查看依赖的更新情况:

composer outdated

7. 自动加载

Composer提供了强大的自动加载功能。安装依赖后,只需要在项目中引入vendor/autoload.php文件,就可以自动加载所有依赖和自己的类。

require 'vendor/autoload.php';

// 现在可以直接使用依赖中的类了
$log = new Monolog\Logger('name');

Composer支持多种自动加载规范:

  • PSR-4:推荐使用,命名空间和目录映射
  • PSR-0:旧的规范,已不推荐
  • classmap:扫描目录,生成类映射
  • files:手动指定需要加载的文件

在composer.json中配置自动加载:

{
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        },
        "files": [
            "src/helpers.php"
        ]
    }
}

修改自动加载配置后,需要运行:

composer dump-autoload

重新生成自动加载文件。

版本约束

Composer使用版本约束来指定依赖的版本,常用的版本约束方式:

1. 精确版本

"monolog/monolog": "1.24.0"

指定精确的版本,Composer只会安装这个版本。

2. 通配符

"monolog/monolog": "1.2.*"

使用通配符*,匹配1.2.x的所有版本。

3. 范围

"monolog/monolog": ">=1.0 <2.0"

使用比较运算符指定版本范围,支持>=、<=、>、<、!=。

4. 连字符范围

"monolog/monolog": "1.0 - 2.0"

使用连字符指定版本范围,包含1.0和2.0。

5. 波浪号(~)

"monolog/monolog": "~1.2"

波浪号表示>=1.2 <2.0,即最后一位可以变,前面的不变。

  • ~1.2 等价于 >=1.2 <2.0
  • ~1.2.3 等价于 >=1.2.3 <1.3.0

6. 脱字符(^)

"monolog/monolog": "^1.2"

脱字符表示>=1.2 <2.0,即第一位(主版本号)不变,后面的可以变。这是最常用的版本约束方式,遵循语义化版本(SemVer)。

  • ^1.2.3 等价于 >=1.2.3 <2.0.0
  • ^0.3.2 等价于 >=0.3.2 <0.4.0(0.x版本特殊处理)

推荐使用脱字符(^)作为版本约束,它既能保证兼容性,又能获取bug修复和新功能。

Packagist

Packagist是Composer的默认包仓库,地址是https://packagist.org/。几乎所有的PHP开源库,都可以在Packagist上找到。

你可以在Packagist上搜索需要的包,查看包的信息、版本、下载量、依赖等,然后用composer require安装。

国内访问Packagist可能比较慢,可以使用国内镜像加速:

# 配置全局镜像(推荐)
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://mirrors.huaweicloud.com/repository/php/

常用命令速查

# 初始化项目
composer init

# 安装依赖
composer install

# 添加依赖
composer require 包名
composer require --dev 包名

# 更新依赖
composer update
composer update 包名

# 移除依赖
composer remove 包名

# 查看依赖
composer show
composer show 包名
composer outdated

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

# 检查依赖安全
composer audit

# 自我更新
composer self-update

# 查看版本
composer --version

# 查看帮助
composer --help

最佳实践

  1. 提交composer.json和composer.lock到版本控制:composer.json记录依赖配置,composer.lock锁定依赖版本,都应该提交到Git等版本控制系统,确保团队成员使用相同版本的依赖。
  2. 不要提交vendor目录到版本控制:vendor目录是依赖的安装目录,体积大,不应该提交到版本控制。用.gitignore忽略vendor目录。
  3. 生产环境用composer install:生产环境应该用composer install,按照composer.lock安装依赖,不要用composer update,避免因为依赖更新导致问题。
  4. 使用语义化版本:依赖的版本号应该遵循语义化版本(主版本号.次版本号.修订号),用脱字符(^)作为版本约束。
  5. 定期更新依赖:定期运行composer update,更新依赖到最新版本,获取bug修复和安全更新。但更新后要测试,确保没有兼容性问题。
  6. 使用国内镜像:国内访问Packagist较慢,配置国内镜像加速安装。
  7. 使用自动加载:利用Composer的自动加载功能,规范项目的目录结构和命名空间。
  8. 区分生产依赖和开发依赖:生产环境需要的依赖放在require中,开发环境需要的依赖(测试、代码检查等)放在require-dev中,生产环境安装时用--no-dev选项。

常见问题

1. 安装慢或超时

解决方法:

  • 配置国内镜像
  • 增加超时时间:composer config -g process-timeout 3000
  • 使用--prefer-dist选项,优先下载压缩包

2. 内存不足

解决方法:

  • 增加PHP内存限制:php -d memory_limit=-1 composer.phar install
  • 使用--no-dev选项,不安装开发依赖
  • 升级Composer到最新版本

3. 版本冲突

解决方法:

  • 查看冲突的依赖,调整版本约束
  • 使用composer why命令查看依赖关系
  • 升级或降级冲突的依赖

4. 自动加载不生效

解决方法:

  • 检查composer.json中的autoload配置是否正确
  • 运行composer dump-autoload重新生成自动加载
  • 检查命名空间和目录结构是否对应

总结

Composer是PHP开发必备的依赖管理工具,它让PHP项目的依赖管理变得简单、高效。

核心要点:

  1. 安装:Windows用安装程序,Linux/Mac用命令行安装
  2. 基本使用:init初始化、install安装、require添加、update更新、remove移除、show查看
  3. 自动加载:引入vendor/autoload.php,支持PSR-4等规范
  4. 版本约束:推荐用脱字符(^),遵循语义化版本
  5. Packagist:默认包仓库,国内用镜像加速
  6. 最佳实践:提交composer.json和lock、忽略vendor、生产用install、定期更新依赖

Composer已经成为PHP生态的基础设施,掌握它是每个PHP开发者的必备技能。希望这篇教程能帮你快速上手Composer,让你的PHP开发更加高效。