Composer 依赖管理器
php相关 /
2013年03月28日 08时25分 /
10253人浏览
Composer 这个好东西必须分享下,下文翻译自官方文档,先让大家有个概念。(接触过 Symfony 的同学应该早熟悉了,可以略过 ...)
1、介绍
Composer 是 PHP 的一个依赖管理器。它允许你在项目中声明所依赖的代码库,然后它会帮你在项目中安装这些代码库。
2、依赖管理
Composer 不是一个包管理工具。虽然,它是在处理“包”或者代码库,但它是基于项目的,在一个项目内部,将项目依赖的代码库安装到一个目录(比如:verndor)。默认情况下它绝不会安装任何全局的东西。所以,它只是个依赖管理器。
这个想法并不是新出来的,Composer 受到 Node 的 npm 、 ruby 的 bundler 的强烈启发。PHP 以前可从没这种工具。
3、Composer 所解决的问题:
a)你有一个依赖了很多代码库的项目;
b)其中一些代码库又依赖了其他代码库;
c)你声明了你所依赖的东西;
d)Composer 找出哪些版本的哪些代码库应该被安装,并且安装它们(意味着它会下载这些代码库到你的项目中)。
4、声明依赖
假设你创建了一个项目,并且你需要一个代码库来做记录日志的工作。你决定用 monolog 这个代码库。为了将这个代码库添加到你的项目中,你需要做的只是创建一个 composer.json 文件,由它来描述项目的依赖。
{
"require": {
"monolog/monolog": "1.2.*"
}
}
OK,我们已经定义了我们的项目需要 monolog/monolog 这个包,版本是任何以 1.2 开头的。
5、安装要求
Composer 需要在 PHP 5.3.2+ 下运行。同时还需要少量敏感的 php 设置和编译参数,不过如果有任何不兼容,安装包会提醒你。
Composer 是多平台的,它的开发团队已经努力让它在 Windows、 Linux、 OSX 下都能运行良好。
6、安装 Composer
(略,我们重点做介绍和了解,安装可直接看官方文档)
7、使用 Composer
我们现在开始用 Composer 来安装项目的依赖(在当前目录下得有 composer.json 这个文件)。下载依赖的代码库,在命令行下使用 install 命令:
php composer.phar install
(这里的 composer.phar 就是 Composer 的 PHP 代码包,需要由 PHP 解释器运行)
如果你做了全局的安装,当前目录下一般也找不到那个 phar 文件,则运行这个:
composer install
(这里的 composer 是已经封装好的命令行脚本,比如在 Windows 下其实就是 composer.bat)
按照上面的例子,这条命令会将 monolog 代码库下载到 vendor/monolog/monolog 目录。
8、自动加载代码库
除了下载安装代码库,Composer 也准备了一个用做自动加载(autoload)的文件,让下载下来的代码库中的所有类(class)都能被自动加载。要使用这个文件,只要在你项目启动时加这行代码即可:
require 'vendor/autoload.php';
哇塞!现在就可以使用 monolog 了!
Composer 的基本用法
1、composer.json 项目安装配置文件
该文件描述了项目依赖,同时还可能包含点其他配置。文件使用 JSON 格式,写过 javascript 的肯定熟悉。
(1)require 关键字
{
"require": {
"monolog/monolog": "1.0.*"
}
}
包含了一个映射了包名(如:monolog/monolog)和包版本号(如:1.0.*)的对象;
(2)包名
包名由供应方名(vendor name)和项目名(project's name)组成。通常它们是唯一的,供应方名只是为了防止名字冲突而存在。这就允许两个不同的人都能创建一个叫 json 的代码库,它们分别命名为:igorw/json 和 seldaek/json 。
比如之前例子里的 monolog/monolog,供应方名和项目名是一样的。项目有个唯一名称是非常必要的。这样就允许你以后可以在同一个命名空间下添加更多相关的项目。如果你在维护一个代码库,这也会让你非常容易的将代码库分离成更小的松耦合的部分。
(3)包版本号
比如 1.0.*,表示任何 1.0 的开发分支都可以,可以是:1.0.0,1.0.2,1.0.20.
版本约束有几种不同的方式。
a)指明的版本号:比如 1.0.2;
b)范围:使用比较操作符,有效的操作符有 > >= < <= != 。比如 >=1.0。你可以用逗号分隔来定义多个范围,如:>=1.0,<2.0
c)通配符:比如 1.0.* 就等同于 >1.0,<1.1
d)下一个重要发布(波浪符):~ 这个操作符可以用这个例子说明,~1.2 等同于 >=1.2,<2.0 ,~1.2.3 等同于 >=1.2.3,<1.3 。这个方法非常语义化,通常的用法是通过它标明你依赖的最低版本,比如 ~1.2(允许更新,但不包括 2.0)
默认情况下,只有稳定的发布版本才会纳入版本的选择。如果你愿意,你也可以获取 RC,beta,alpha 或者 dev 版本作为你的依赖版本。
2、安装依赖
install 命令同时会在项目根目录生成一个 composer.lock 文件;
在安装完依赖后,Composer 将已经安装的包的明确版本信息写入 composer.lock 文件。项目就锁定了这些指定的版本号了。
composer.lock 需要提交到你的版本库中。
这很重要,因为 install 命令会检查 lock 文件是否存在,如果存在,它就下载这些指定的版本(因为 composer.json 里的说明还是太含糊了)。这意味着,任何人安装项目时都能为依赖下载同样版本的代码,保持一致。
如果 lock 文件不存在,Composer 会从 composer.json 中阅读依赖关系和依赖版本,然后创建 lock 文件。
这意味着(有 lock 文件的情况下),任何被依赖的代码库如果有了新的版本,你不会自动获得这些更新。要想更新到新的版本,需要使用 update 命令。这将会为你获取最新的版本,并更新到 lock 文件。
3、Packagist
Packagist 是主要的 Composer 仓库。一个 Composer 仓库本质上是个包的源:一个你可以从它那获得代码库的地方。Packagist 旨在成为中心仓库,让所有人都能使用。这表示你可以 “require” 那上面任何有效的代码库。
去 packagist.org 看看,你可以浏览和搜索代码库。
任何使用 Composer 的开源项目应该发布他们的代码库到 Packagist 上。一个代码库并不一定要放到 Packagist 上被 Composer 使用,但这难道不会让生活简单很多么?
4、自动加载
你可以为你自己的代码添加自动加载器的配置,在 composer.json 添加 autoload 域。
{
"autoload": {
"psr-0": {"Acme": "src/"}
}
}
Composer 会为 Acme 的命名空间注册一个遵守 PSR-0(一个自动加载机制的规范) 的自动加载器。
上面配置中,你定义了一个从命名空间到目录的映射。这样,在使用类名 Acme\Foo 时,自动加载器会去加载文件: src/Acme/Foo.php。