什么是composer
Composer
是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。
Composer
不是一个包管理器。是的,虽然它涉及 "packages" 和 "libraries",但它在每个项目的基础上进行管理,在你项目的某个目录中(例如 vendor
)进行安装。默认情况下它不会在全局安装任何东西。因此,这仅仅是一个依赖管理*。
Composer 将这样为你解决问题:
你有一个项目依赖于若干个库。
其中一些库依赖于其他库。
你声明你所依赖的东西。
Composer 会找出哪个版本的包需要安装,并安装它们(将它们下载到你的项目中)。
系统要求
运行 Composer 需要 PHP 5.3.2+ 以上版本。一些敏感的 PHP 设置和编译标志也是必须的,但对于任何不兼容项安装程序都会抛出警告。
Composer 是多平台的,可以运行在 Windows
、 Linux
以及 OSX
安装
下载 Composer 的可执行文件
curl -sS https://getcomposer.org/installer | php
注意: 如果上述方法由于某些原因失败了,你还可以通过 php >下载安装器:
php -r "readfile('https://getcomposer.org/installer');" | php
这将检查一些 PHP 的设置,然后下载 composer.phar
到你的工作目录中。这是 Composer 的二进制文件。这是一个 PHAR 包(PHP 的归档),这是 PHP 的归档格式可以帮助用户在命令行中执行一些操作。
你可以通过 --install-dir
选项指定 Composer 的安装目录(它可以是一个绝对或相对路径):
curl -sS https://getcomposer.org/installer | php -- --install-dir=bin
局部安装
通过上一步已经下载了 composer.phar
, 此时可能在项目中使用 php composer.phar install
来使用composer
了
全局安装
每次使用composer都要写php composer.phar
命令, 相信你一定厌烦了, 这里我们可以简化一下命令, 将我们的composer.phar
文件放入系统的PATH
目录, 可以直接运行
mv composer.phar /usr/local/bin/composer
注意: 如果上诉命令因为权限执行失败, 请使用 sudo 再次尝试运行
mv
那行命令。
现在只需要运行 composer
命令就可以使用 Composer 而不需要输入 php composer.phar
。
全局安装 (on OSX via homebrew)
Composer 是 homebrew-php 项目的一部分。
brew update
brew tap josegonzalez/homebrew-php
brew tap homebrew/versions
brew install php55-intl
brew install josegonzalez/php/composer
设置国内镜像
全局设置(推荐)
阿里云镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
phpcomposer 镜像
composer config -g repo.packagist composer https://packagist.phpcomposer.com
项目设置单独设置
阿里云镜像
composer config repo.packagist composer https://mirrors.aliyun.com/composer/
phpcomposer 镜像
composer config repo.packagist composer https://packagist.phpcomposer.com
上述命令将会在当前项目中的 composer.json
文件的末尾自动添加镜像的配置信息(你也可以自己手工添加):
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
}
取消设置
解除镜像并恢复到 packagist 官方源,请执行以下命令:
composer config -g --unset repos.packagist
使用 Composer
除了库的下载,Composer 还准备了一个自动加载文件,它可以加载 Composer 下载的库中所有的类文件。使用它,你只需要将下面这行代码添加到你项目的引导文件中:
require 'vendor/autoload.php';
require Key
第一件事情(并且往往只需要做这一件事),你需要在 composer.json
文件中指定 require
key 的值。你只需要简单的告诉 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
。
版本约束可以用几个不同的方法来指定。
名称 | 实例 | 描述 |
---|---|---|
精确的版本号 | 1.0.2 |
指定包的确切版本。 |
范围 | >=1.0 >=1.0,<2.0 >=1.0,<1.1或>=1.2 |
通过使用比较操作符可以指定有效的版本范围, 有效的运算符: > ,>= ,< ,<= ,!= ,可以定义多个操作范围, 用逗号隔开,这将被视为一个逻辑AND处理, 一个管道符号将作为逻辑OR处理, AND优先级高于OR |
通配符 | 1.0.* |
1.0.* 与>=1.0,<1.1 是等效的。如1.0.9 |
赋值运算符 | ~1.2 |
~1.2 相当于>=1.2,<2.0 |
安装依赖包
安装composer.json
中的依赖到你的项目, 只需执行以下命令:
composer install
首次安装
这个命令将会根据composer.json
文件中的定义, 找到符合的最新版本, 并下载依赖到./vendor
文件夹中
同时, 还会生成一个composer.lock
的锁文件, 关于这个文件 , 下面会讲到
非首次安装
如果当前目录存在composer.lock
文件, 则执行composer install
命令时, 将会忽略composer.json
文件中的配置, 直接下载composer.lock
记录相应版本的依赖
composer.lock 锁文件
在安装依赖后,Composer 将把安装时确切的版本号列表写入 composer.lock
文件。这将锁定该项目的特定版本。
如果项目中使用了版本控制, 应当 将composer.json
和composer.lock
提交到版本库中
当存在锁文件时, 不管斜体人执行composer install
命令, 都会下载锁文件中对应的版本, 解决了多人开发时使用的依赖版本不一所引发的问题
更新依赖包
使用下面的命令来更新依赖包
composer update
如果依赖发布了新的版本, 但是由于composer.lock
文件的限制, 我们仍然使用的是旧版本的依赖, 此时如果想更新依赖的版本, 就可以通过执行上面的命令来获取最新匹配的版本
使用update
命令会将获取的最新的版本信息更新到composer.lock
文件中
注意:
获取的是最新匹配的版本, 并不是最新版本, 如
composer.json
中的某一个依赖定义版本为~1.2
, 则只会升级1.2后面的小版本如果想升级到2.0或以上的版本, 请修改
composer.json
文件中的版本配置, 再次执行update
命令即可
自动加载
对于库的自动加载信息,Composer 生成了一个 vendor/autoload.php
文件。你可以简单的引入这个文件,你会得到一个免费的自动加载支持。
require 'vendor/autoload.php';
定义自己的加载命名空间
你可以在 composer.json
的 autoload
或者autoload-dev
字段中增加自己的 autoloader, 如:
{
"autoload": {
"psr-4": {"MyTest\\FirstTest\\": "src/path/to"}
}
}
Composer 将注册一个 PSR-4 autoloader 到 MyTest\Firsttest
命名空间。
更新自动加载文件
如果修改了autoload
中的配置, 则必须执行下面的命令来重新生成autoload.php
文件
# 这两个命令是等价的
composer dump-autoload
composer dumpautolead
命令行操作
官方地址
官方传送门: https://docs.phpcomposer.com/03-cli.html
忽略php版本要求
有时候我们在安装或依赖时, 依赖中指定了php版本, 该版本可能高于我们的版本也可能低于我们的版本, 不管是低还是高, 都会导致安装出错
此时可以通过添加--ignore-platform-reqs
参数来忽略php版本的检测, 如
composer install --ignore-platform-reqs
composer update --ignore-platform-reqs
忽略dev中的依赖
通过添加 --no-dev
来跳过require-dev
中的依赖
压缩autoload.php文件
composer dump-autoload -o
通过执行以上命令来压缩autoload文件, 加快加载速度, 推荐在生产环境使用
生产环境优化
composer install --prefer-dist --no-dev
composer dump-autoload -o
通过添加--prefer-dist
参数来加快包的下载速度, --no-dev
来跳过require-dev
中的依赖
使用composer dump-autoload -o
命令来压缩自动加载文件