工欲善其事,必先利其器;器欲尽其能,必先得其法。

作为 PHP 工匠,Composer 便是 PHP 工匠们的一大利器之一,下面就介绍一下如何得其法,进而尽其能

项目设置

假设我们的项目需要用到这个库monolog/monolog日志库,首先来安装这个库:

composer require monolog/monolog

执行完成后,在项目中会产生一这个个composer.json 文件。该文件描述了项目的依赖关系,并且还可能包含其他元数据。像Laravel Yii 这些主流框架项目里都会自带这个文件。

目录结构

Composer有关的主要有下面三个目录或文件:

vendor
composer.json
composer.lock

vendor,该目录是所有依赖库安装后的存放目录,即项目中所有第三方代码的常规位置,一般不要人为修改该目录的任何文件,因为每次在执行依赖库更新或安装的时候都有可能被覆盖。

composer.json,该文件是记录了项目中依赖库的关系、版本信息、其他数据。

composer.lock,安装依赖后,Composer 将把安装时确切的版本号列表写入composer.lock文件,这将锁定改项目的特定版本。因此保证多人开发时所用的依赖库的版本一致,同样也保证了开发环境和生产环境的版本的一致性。在执行 composer install package_name 命令时将会检查锁文件是否存在,如果存在,它将下载指定的版本(忽略 composer.json 文件中的定义)。

使用依赖库

Composer 不仅能组织各种依赖库的关系,还能实现依赖库的自动加载,Composer 会生成一个 vendor/autoload.php文件。项目中只需包含此文件即可开始使用这些库提供的类,而无需进行任何额外的工作:

在项目中创建 index.php

<?php

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

$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('logs/app.log', Monolog\Logger::DEBUG));
$log->info('Foo');

然后运行这段代码

php index.php

便会将日志信息记录到 logs/app.log 中。

常用命令

composer install

该命令将从当前目录读取composer.json文件,解析依赖关系,并将其安装到vendor中。

如果composer.lock存在,则直接从composer.lock中读取确切版本,这样可以确保使用该项目的每个人都可以获得相同版本的依赖项;如果没有composer.lock文件,Composer将在依赖关系解析后创建一个文件。

composer update

该命令将根据composer.json文件,获取依赖项最新版本并更新,并将确切的版本写入composer.lock

composer require vendor/package

该命令将安装指定的软件包并添加到composer.json文件中。如果不存在文件,则将即时创建一个文件。

composer remove vendor/package

该命令将移除指定的软件包。

composer self-update

该命令将Composer本身更新到最新版本。