1. 简介
Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。
2. 依赖管理
Composer 不是一个包管理工具。它涉及「packages」和「libraries」,但它在每个项目的基础上进行管理,在某个项目的目录中(例如 vender
)进行安装。默认情况下它不会在全局安装任何东西。因此,这仅仅只是一个依赖管理。
假设情况是这样:
- 你有一个项目依赖于若干个库。
- 其中一些库依赖于其他库。
使用 Composer:
- 你声明你所依赖的库。
- 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/json
和 seldaek/json
。
包版本
在前面的例子中,我们引入的 monolog 版本指定为 1.0.*
。这表示任何从 1.0
开始开发的分支,它将会匹配 1.0.0
、1.0.2
或 1.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] [...]