composer包管理工具

composer是PHP的包管理工具,其依赖的是Packagist这个包仓库。我们可以下载并引用第三方包或是发布自己的包到仓库中。

composer和npm等包管理工具都比较像,下面以Windows系统为例介绍composer的安装和使用。

composer安装

按照官网的操作文档进行安装即可:https://getcomposer.org/download/

这里如果是Windows系统,就直接下载安装程序并运行,PHP的配置文件和环境变量都会为我们自动配置好。

注意:上述操作在大陆地区的网络环境是无法完成的。

安装完成后,自动配置的Path环境变量如下,这个是composer可执行文件的安装位置:

我们可以看到,composer的代码包含在一个phar文件中(一种PHP的归档格式,类似Java的Jar,在PHP中主要用于打包制作一些命令行程序),然后通过Windows下的.bat文件通过php命令进行调用。

注意,由于安装的时候我这里使用了代理服务器,composer自动添加了这么一个环境变量,使得以后使用composer都会走代理,但是我们会配置国内镜像,因此把它干掉。

配置镜像

安装好composer后,我们可以配置上国内镜像加快下载速度。

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

这个操作会在C:\Users\<用户名>\AppData\Roaming\Composer\config.json自动添加相应的配置。

初始化工程

类似npm项目的package.json,composer也有composer.json,其中包括本项目的名字,作者,依赖的包等信息。我们可以用composer init初始化这个项目配置文件。

自动生成的package.json内容如下:

{
    "name": "gacfox/demo-composer",
    "authors": [
        {
            "name": "gacfox",
            "email": "gacfox@qq.com"
        }
    ],
    "require": {}
}

安装依赖

假如我们要安装monolog这个包(一个和日志处理相关的包,composer官网教程就用的这个例子),使用如下命令:

composer require monolog/monolog

包名结构是<仓库名>/<包名>,和npm中的包名结构是一样的。

安装完成后,我们的项目结构发生了如下改变:

  1. 多了个vendor文件夹,里面内容就是安装的依赖包相关文件
  2. composer.json中多了依赖信息
  3. 多了一个composer.lock,用于记录版本等信息,这和npm相同

引用安装的依赖库

composer安装的包通常包含一个autoload.php,我们直接require这个文件,就可以访问所有已经安装的包了(注意包定义的命名空间的问题),下面是一个例子。

<?php
require 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

$log = new Logger('name');
try {
    $log->pushHandler(new StreamHandler('myapp.log', Logger::WARNING));
} catch (Exception $e) {
    error_log($e);
}

$log->warning('Foo');
$log->error('Bar');

根据已有的composer.json安装依赖库

如果我们的项目时从VCS中检出的,可能已经由别人写好的composer.json了,为了安装其中定义的依赖,和npm一样,使用如下命令:

composer install

其它命令

这里再介绍几个composer的常用命令。

composer自我升级。

composer self-update

清除缓存。

composer clear

更新composer.lock文件。

composer update --lock

更多有关composer命令行的内容这里就不多介绍了,请参考官方文档:

https://getcomposer.org/doc/

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap