作为一个PHP程序员我们在开发项目的时候经常需要使用各种第三方库和框架。在没有Composer的时代我们需要手动下载这些库解压放到项目目录里然后手动引入非常麻烦而且不好管理版本和依赖。

Composer的出现彻底改变了这一现状。Composer是PHP的依赖管理工具能帮我们自动管理项目的依赖自动下载和安装第三方库自动处理依赖关系大大提高了PHP开发的效率。

今天就来分享一下Composer的使用教程包括安装配置基本使用composer.json常用命令国内镜像等希望能帮到大家。

1. Composer简介

1.1 什么是Composer

Composer是PHP的依赖管理工具由Jordi Boggiano和Nils Adermann开发首次发布于2012年。它能帮我们管理项目的依赖自动下载和安装第三方库自动处理依赖关系和版本约束。

Composer的灵感来自于Node.js的npm和Ruby的bundler。它不是一个包管理器而是一个依赖管理器它按项目来管理依赖每个项目可以有自己独立的依赖版本互不影响。

1.2 Composer的优势

  • 自动管理依赖:Composer能自动解析和安装项目的依赖不需要手动下载和引入。
  • 版本控制:Composer能精确控制依赖的版本支持各种版本约束比如精确版本范围通配符,等。
  • 自动加载:Composer自动生成自动加载文件不需要手动require各种类文件。
  • 丰富的包仓库:Composer有丰富的包仓库Packagist上面有大量的PHP库和框架可以直接使用。
  • 提高开发效率:Composer大大简化了依赖管理的流程提高了PHP开发的效率。

2. Composer安装

2.1 Linux/Mac安装

在Linux或Mac上安装Composer很简单只需要执行以下命令:

# 下载Composer安装脚本
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');"

# 移动到全局可执行目录
mv composer.phar /usr/local/bin/composer

# 验证安装
composer --version

也可以使用更简单的方式:

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

2.2 Windows安装

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

方式一:使用安装程序

下载Composer-Setup.exe运行安装程序按照提示一步步安装即可。安装程序会自动配置环境变量安装完成后就可以在命令行直接使用composer命令。

方式二:手动安装

下载composer.phar放到PHP安装目录然后在同目录下创建composer.bat文件内容,为:

@php "%~dp0composer.phar" %*

然后把PHP安装目录添加到系统环境变量PATH中就可以在命令行使用composer命令,了。

2.3 验证安装

安装完成后在命令行执行:

composer --version

如果显示Composer的版本信息说明安装成功。

3. Composer基本使用

3.1 初始化项目

在项目根目录执行:

composer init

这个命令会交互式地引导你创建composer.json文件会询问项目名称描述作者最低稳定版本依赖等信息。你也可以直接手动创建composer.json文件。

3.2 composer.json文件

composer.json是Composer的配置文件放在项目根目录定义了项目的依赖和其他配置。一个简单的composer.json示例:

{
    "name": "yourname/project",
    "description": "项目描述",
    "type": "project",
    "license": "MIT",
    "authors": [
        {
            "name": "Your Name",
            "email": "your@email.com"
        }
    ],
    "require": {
        "php": ">=7.0",
        "monolog/monolog": "^1.0",
        "guzzlehttp/guzzle": "^6.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^6.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

关键字段说明:

  • name:项目名称格式为,"作者/项目名"。
  • description:项目描述。
  • type:项目类型可选值有library,project,metapackage,composer-plugin。
  • license:许可证。
  • authors:作者信息。
  • require:生产环境依赖包和版本约束。
  • require-dev:开发环境依赖包和版本约束。
  • autoload:自动加载配置。

3.3 安装依赖

在项目根目录执行:

composer install

这个命令会读取composer.json文件解析依赖关系下载和安装所有依赖到vendor目录并且生成composer.lock文件和自动加载文件。

如果项目中已经有composer.lock文件composer install会按照composer.lock中记录的精确版本安装确保所有环境的依赖版本一致。

3.4 添加依赖

添加新的依赖可以直接编辑composer.json文件然后执行composer install也可以使用命令:

# 添加生产依赖
composer require vendor/package

# 添加指定版本的依赖
composer require vendor/package:^1.0

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

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

3.5 更新依赖

更新依赖到最新版本执行:

# 更新所有依赖
composer update

# 更新指定依赖
composer update vendor/package

# 更新多个依赖
composer update vendor/package1 vendor/package2

这个命令会读取composer.json文件解析版本约束更新依赖到符合约束的最新版本并且更新composer.lock文件。

注意:composer update会更新所有符合版本约束的依赖可能会导致版本变化建议在开发环境测试没问题后再部署到生产环境。

3.6 移除依赖

移除不需要的依赖执行:

composer remove vendor/package

这个命令会自动修改composer.json文件移除依赖并且删除对应的文件更新composer.lock文件。

3.7 自动加载

Composer会自动生成自动加载文件vendor/autoload.php只需要在项目入口文件中引入它就可以自动加载所有依赖的类和自己的,类。

require __DIR__ . '/vendor/autoload.php';

// 然后就可以直接使用依赖的类了
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

$log = new Logger('name');
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));
$log->warning('Foo');

3.8 配置自动加载

在composer.json中配置autoload字段可以让Composer自动加载自己的,类。

PSR-4自动加载

{
    "autoload": {
        "psr-4": {
            "App\\": "src/",
            "Library\\": "lib/"
        }
    }
}

这表示命名空间App\\,对应目录src/,命名空间Library\\,对应目录lib/。

PSR-0自动加载

{
    "autoload": {
        "psr-0": {
            "App_": "src/",
            "Library_": "lib/"
        }
    }
}

classmap自动加载

{
    "autoload": {
        "classmap": ["src/", "lib/"]
    }
}

这会扫描指定目录下的所有类生成类名到文件路径的映射。

修改autoload配置后需要执行:

composer dump-autoload

重新生成自动加载文件。

4. 版本约束

Composer支持多种版本约束方式:

4.1 精确版本

{
    "require": {
        "vendor/package": "1.0.0"
    }
}

指定精确的版本只安装1.0.0版本。

4.2 版本范围

{
    "require": {
        "vendor/package": ">=1.0.0 <2.0.0"
    }
}

指定版本范围安装大于等于1.0.0小于2.0.0的版本。也可以使用逗号分隔等价于逻辑与。

4.3 通配符

{
    "require": {
        "vendor/package": "1.0.*"
    }
}

使用通配符,,匹配任意版本1.0.,等价于,>=1.0.0 <1.1.0。

4.4 赋值运算符

{
    "require": {
        "vendor/package": "~1.2"
    }
}

使用,~,运算符,~1.2等价于,>=1.2.0 <2.0.0即不超过下一个重大版本。~1.2.3等价于,>=1.2.3 <1.3.0。

4.5 脱字符运算符

{
    "require": {
        "vendor/package": "^1.2"
    }
}

使用,^,运算符,^1.2等价于,>=1.2.0 <2.0.0和,~,类似但是遵循语义化版本更严格。^0.3等价于,>=0.3.0 <0.4.0因为0.x版本不保证向后兼容。

4.6 稳定性

默认Composer只安装稳定版本。如果需要安装开发版本可以在版本后加,@dev,@alpha,@beta,@RC等稳定性标记。

{
    "require": {
        "vendor/package": "1.0.*@dev"
    }
}

也可以在composer.json中设置minimum-stability字段指定最低稳定版本:

{
    "minimum-stability": "dev",
    "prefer-stable": true
}

5. 常用命令

5.1 查看已安装的包

composer show

查看所有已安装的包和版本。

5.2 查看包的详细信息

composer show vendor/package

查看指定包的详细信息包括版本依赖描述,等。

5.3 搜索包

composer search keyword

在Packagist中搜索包含关键字的,包。

5.4 验证composer.json

composer validate

验证composer.json文件是否有效。

5.5 诊断问题

composer diagnose

诊断Composer环境的常见问题比如PHP版本扩展网络,等。

5.6 自我更新

composer self-update

更新Composer本身到最新版本。

5.7 清除缓存

composer clear-cache

清除Composer的缓存目录。

5.8 检查过时的依赖

composer outdated

查看哪些依赖有新版本可以更新。

6. 国内镜像配置

由于国内访问Packagist和GitHub比较慢建议配置国内镜像加速下载。

6.1 阿里云镜像

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

6.2 腾讯云镜像

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

6.3 华为云镜像

composer config -g repo.packagist composer https://mirrors.huaweicloud.com/repository/php/

6.4 取消镜像配置

如果需要恢复官方源执行:

composer config -g --unset repos.packagist

6.5 项目级镜像配置

也可以只对当前项目配置镜像去掉,-g参数即可:

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

这会修改当前项目的composer.json文件。

7. 常见问题

7.1 内存不足

Composer在解析依赖的时候可能会占用大量内存导致内存不足报错。解决方法是增加PHP的内存限制:

php -d memory_limit=-1 /usr/local/bin/composer install

或者修改php.ini文件:

memory_limit = -1

7.2 下载超时

网络不好的时候可能会下载超时。可以配置国内镜像或者增加超时时间:

composer config -g process-timeout 600

7.3 版本冲突

依赖版本冲突是常见问题可以使用以下命令查看依赖树分析冲突:

composer why vendor/package
composer why-not vendor/package:1.0.0

7.4 自动加载不生效

修改autoload配置后需要执行composer dump-autoload重新生成自动加载文件。

写在最后

以上就是Composer,PHP依赖管理工具的使用教程。Composer是现代PHP开发必备的工具掌握Composer的使用能大大提高PHP开发的效率。

Composer的功能还有很多比如脚本事件钩子自定义安装器等这些高级功能需要在实际使用中慢慢学习和掌握。对于日常开发来说掌握上面的基本使用就已经足够,了。

如果你还没有使用Composer强烈建议你开始使用,它。它会改变你对PHP依赖管理的认识让你的PHP开发更加高效和规范。

希望这篇教程能帮到大家快速入门Composer。如果有什么问题或者建议欢迎在评论区留言和我一起讨论。

最后提醒大家几句:

  1. 提交composer.lock:composer.lock文件应该提交到版本控制确保所有环境的依赖版本一致。
  2. 不要提交vendor目录:vendor目录不需要提交到版本控制其他开发者可以通过composer install安装依赖。
  3. 配置国内镜像:国内用户建议配置国内镜像加速下载提高效率。
  4. 注意版本约束:合理设置版本约束避免依赖更新导致兼容性问题。

祝大家都能用好Composer享受高效的PHP开发!