Skip to main content

Composer 使用指南

Composer 是 PHP 的依赖管理工具,类似于 Node.js 的 npm 或 Python 的 pip。它可以帮助你声明、安装和管理 PHP 项目所依赖的库。

安装 Composer

Windows 系统

  1. 下载 Composer-Setup.exe
  2. 运行安装程序,按照向导完成安装
  3. 安装完成后,在命令行输入 composer --version 验证安装

Linux/macOS 系统

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
sudo mv composer.phar /usr/local/bin/composer

基本使用

1. 初始化项目

composer init

按照提示填写项目信息,会生成 composer.json 文件。

2. 安装依赖

composer install

这会读取 composer.json 文件并安装所有指定的依赖包到 vendor 目录。

3. 添加新依赖

composer require vendor/package

例如:

composer require monolog/monolog

这会自动更新 composer.jsoncomposer.lock 文件。

4. 更新依赖

composer update

更新所有依赖到最新版本(在 composer.json 约束范围内)。

5. 更新特定包

composer update vendor/package

6. 移除依赖

composer remove vendor/package

composer.json 文件结构

典型示例:

{
    "name": "your-project/name",
    "description": "Your project description",
    "type": "project",
    "require": {
        "php": "^7.4 || ^8.0",
        "monolog/monolog": "^2.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^9.0"
    },
    "autoload": {
        "psr-4": {
            "YourNamespace\\": "src/"
        }
    }
}

常用命令

  • composer list - 显示所有可用命令
  • composer show - 显示已安装的包
  • composer search package - 搜索包
  • composer dump-autoload - 重新生成自动加载文件
  • composer self-update - 更新 Composer 自身
  • composer check-platform-reqs - 检查平台要求

自动加载

Composer 提供了自动加载功能,你只需要在代码中添加:

require 'vendor/autoload.php';

开发和生产环境

  • require 部分包含生产环境所需的包
  • require-dev 部分包含开发环境所需的包

安装时排除开发依赖:

composer install --no-dev

全局包

安装全局包(如 Laravel 安装器):

composer global require laravel/installer

镜像加速(中国用户)

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

恢复官方源:

composer config -g --unset repos.packagist

常见问题解决

  1. 内存不足错误

    COMPOSER_MEMORY_LIMIT=-1 composer update
    
  2. 版本冲突:仔细检查包版本要求,或使用 composer why-not vendor/package version 查看冲突原因

  3. 清除缓存

    composer clear-cache
    

Composer 是现代化 PHP 开发不可或缺的工具,熟练掌握它可以大大提高开发效率。