1. 简介

Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。

2. 依赖管理

Composer 不是一个包管理工具。它涉及「packages」和「libraries」,但它在每个项目的基础上进行管理,在某个项目的目录中(例如 vender)进行安装。默认情况下它不会在全局安装任何东西。因此,这仅仅只是一个依赖管理。

假设情况是这样:

  • 你有一个项目依赖于若干个库。
  • 其中一些库依赖于其他库。

使用 Composer:

  1. 你声明你所依赖的库。
  2. Composer 会找出哪个版本的包需要安装,并安装它们(也就是下载到你的项目中)。

3. 系统要求

运行 Composer 需要 PHP 5.3.2+ 版本。

由于直接安装包的源码,而不是简单的下载 zip 文件。所以如果要进行版本管理,则需要 Git 或 SVN 等。

Composer 支持多平台,我们努力使它在 Windows、Linux 以及 OSX 平台上运行的同样出色。

4. 安装

4.1 Linux/Unix/OSX

下载可执行文件

Composer 提供便利的安装程序,直接在命令行下运行它就可以。点击下载,如果需要了解更多信息,可以在 GitHub 上查看,源码是 PHP。

有两种方式安装 Composer。局部安装只安装到项目中;全局安装则安装到整个系统中,可以在任意地方执行。

局部安装

在项目目录下执行命令:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

如果满足安装要求,会下载文件 composer.phar 到当前目录下。

然后执行以下命令进行安装:

php composer-setup.php --install-dir=bin --filename=composer

运行 Composer:

php bin/composer

全局安装

先下载文件,可以把 composer.phar 放在任意目录下。如果该目录添加到了环境变量 PATH 中,则可以全局调用。

例如:

mv composer.phar /usr/local/bin/composer

运行 Composer:

composer

4.2 Windows

下载 并运行安装程序,它会自动设置好环境变量,所以你可以在任意目录下直接运行 composer 命令。

5. 基本使用

要开始在项目中使用 Composer,只需要一个 composer.json 文件。该文件包含了项目的依赖和其它的一些元数据。

5.1 require

首先要在 composer.json 中指定 require 的值,告诉 Composer 你的项目需要依赖哪些包。

{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

可以看到,require 里是一个键为「包名称」(如:monolog/monolog ),值为「包版本」(如:1.0.* )的对象。

包名称

包名称由供应商名称和其项目名称构成。通常容易产生相同的项目名称,而供应商名称的存在则很好的解决了命名冲突的问题。举例来说,两个不同的人创建同样名为 json 的库,可以分别命名为 igorw/jsonseldaek/json

包版本

在前面的例子中,我们引入的 monolog 版本指定为 1.0.*。这表示任何从 1.0 开始开发的分支,它将会匹配 1.0.01.0.21.0.20

5.2 版本约束

名称 实例 描述
指定版本号 1.0.2 指定具体版本号
范围 >=1.0 >=1.0,<2.0 通过使用比较操作符可以指定有效的版本范围。有效的运算符:>>=<<=!=。你可以定义多个范围,用逗号隔开,这将被视为一个逻辑 AND 处理。一个管道符号将作为逻辑 OR 处理。AND 的优先级高于 OR。
通配符 1.0.* 可以使用通配符 * 来指定一种模式。1.0.*>=1.0,<1.1 是等效的。
赋值运算符 ~1.2 这对于遵循语义化版本号的项目非常有用。~1.2 相当于 >=1.2,<2.0

6. 安装依赖包

获取定义的依赖到本地项目,只需要运行 install 命令:

composer install

在国内,由于被墙的原因,可以使用国内镜像来加速。

  • 全局配置(推荐)
    composer config -g repo.packagist composer https://packagist.laravel-china.org
  • 单独使用
    composer config repo.packagist composer https://packagist.laravel-china.org
  • 取消镜像
    composer config -g --unset repos.packagist

该命令会读取当前目录下的 composer.json 文件,解析相关依赖并将它们安装到 vendor 目录中。如果是 monolog 将会创建 vendor/monolog/monolog 目录。

如果你正在使用 Git 来管理你的项目,可能要添加 vendor.gitignore 文件到中。这样就可以避免把所有的代码添加到版本库中。

另外,install 命令将会创建一个 composer.lock 文件到项目的根目录中,该文件记录了依赖安装时的具体版本号,这将锁定该项目的特定版本。

请提交项目的 composer.lock (包括 composer.json)到版本库中。

如果锁文件存在,将会下载指定的版本,忽略 composer.json 文件中的定义。如果不存在 composer.lock 文件,Composer 将读取 composer.json 并创建锁文件。

7. 常用命令

7.1 安装

使用 require 命令来添加新的包:

composer require [package name] [...]

7.2 更新

使用 update 命令来更新包:

composer update [package name] [...]

7.3 移除

使用 remove 命令来移除包:

composer remove [package name] [...]