just do it

Composer 依赖管理器

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。

点赞