Composer是PHP的包管理工具,类似于Ruby的gem、Python的pip、Nodejs的npm,利用它可以方便的安装和管理依赖的包。
作为一个PHP的依赖包管理工具,其主要提供了两个功能:

  • 依赖包安装和管理
  • autoload自动加载

Composer和Packagist

Composer是由 Jordi Boggiano 和 Nils Aderman 创造的一个命令行工具,它的使命就是帮你为项目自动安装所依赖的开发包。作为一个包管理工具,当然就离不开“包”,Composer的默认开发包仓库就是Packagist(这么优秀的一个网站的结果当然就是被墙了)。
Packagist中有大量前人开发的扩展包,当然你也可以将你自己的安装包提交到上面,这样后续你开发其他项目时就可以用Composer安装你扩展包了。

Composer安装

Composer依赖PHP5.3.2+
安装很简单:

1
$ curl -sS https://getcomposer.org/installer | php

这个命令会把composer.phar下载到当前目录,该文件可以在命令行下直接运行:

1
$ composer.phar help

也可以进行全局安装:

1
2
$ mv composer.phar /usr/local/bin/composer
$ composer help

或者直接把composer.phar放到PATH环境变量中。

Composer使用

镜像

由于众所周知的原因,Composer的默认安装包仓库访问不了,因此第一件事就是架个梯子,或者用国内的镜像仓库。
由于Composer发展很快,目前国内有不少可以用的镜像,比如这个这个、还有这个,不过这几个镜像好像都是个人维护的,所以有的时候连不上可以换换试试。
镜像配置方式在这里有很详细的说明,这里就不赘述了。

终于到了怎么使用了

先想一个场景,比方说我要写一个爬虫,而php自带的curl并不是很好用,搜了一下发现有一个库叫requests,是一个http请求相关的库,这时就可以用composer方便的安装这个库。
首先,编辑配置文件。在项目的根目录下生成一个composer.json文件,在里面写上依赖的库名称:

1
2
3
4
5
{
"require": {
"rmccue/requests": ">=1.0"
}

}

然后,运行命令安装:

1
$ composer install

完成后,composer就会将requests库安装到vender/rmccue/requests目录下。
这时候,只要把自动加载文件load进去就可以直接使用了:

1
require "vender/autoload.php";

composer命令

除了install之外,composer还有很多其他的命令,比如:

1
2
3
4
5
6
composer init //初始化,生成composer.json
composer update //更新composer.lock后面详细讲
composer require //通过命令行添加依赖包到composer.json中
composer self-update //更新composer版本
composer dump-autoload //更新autoloader,一般在更新了依赖包的时候使用
等等...

composer的命令和作用可以去这里查看。

composer update

当执行install命令时,composer首先会看当前目录下是否存在composer.lock文件,若存在则读取该文件而不是composer.json。如果没有的话,则会读取composer.json,并在处理完成后创建composer.lock文件。
因此当修改了composer.json文件时,即使执行了install命令,composer也不会去下载新增的依赖包,这时候就需要执行

1
composer update

来更新composer.lock文件,然后执行install才能真正的安装新增的依赖。
关于这个锁文件的作用,可以参考官方的文档

composr.json

大多数情况下,composer是用来做依赖管理的,因此composer.json里只有require字段,像这样:

1
2
3
4
5
6
{
"require": {
"monolog/monolog": "1.0.*",
"rmccue/requests": ">=1.0"
}

}

这里面的key是包名,包括供应商名称和项目名称,用/分隔。
value是版本号,版本号有几种不同的指定方法:

  • 确切的版本号1.0.2
  • 范围>=1.0 >=1.0,<2.0 >1.0,<1.1|>=1.2,支持的运算符:>>=<<=!=,表示AND,|表示OR
  • 通配符1.0.*1.0.*>=1.0,<1.1是等效的
  • 赋值运算符~1.2~1.2相当于>=1.2,<2.0,即大于1.2的二位版本,小于2.0的一位版本

默认情况下,非确定版本的版本号是从最高位开始尝试的。如1.0.*会从最高的1.0.99(假设有)开始尝试安装

关于版本号的其他信息可以查看官方文档

composer.json还有很多其他的配置如项目自身的包名、描述、版本还有autoload等等(每一个项目都可以当做包来用composer发布,只要你写好了composer.json并上传上去),具体信息也可以去看下官方文档

留言