PHP的包管理工具Composer
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
6composer 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并上传上去),具体信息也可以去看下官方文档