目录
Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。
composer可以解决如下问题
a) 一个项目依赖于若干个库
b) 其中一些库依赖于其他库
c) 声明所依赖的东西
d) Composer找出哪个版本的包需要安装,并安装他们
声明依赖关系
比如使用monolog 那么只需创建composer.json
文件
{
"require": {
"monolog/monolog": "1.2.*"
}
}
require 需要一个 包名称 (例如 monolog/monolog
) 映射到 包版本 (例如 1.0.*
) 的对象
### 包名称
供应商名称与项目的名称 monolog/monolog
### 包版本
确切版本号:1.0.2
范围:>=1.0 >=1.0,<2.0 >=1.0,<1.1|>=1.2
通配符:1.0.*
赋值运算符:~1.2
>=1.2,\<2.0
系统要求
PHP5.3.2+
安装
curl -sS https://getcomposer.org/installer | php
或
php -r "readfile('https://getcomposer.org/installer');" | php
--install-dir
选项指定Composer的安装目录
curl -sS https://getcomposer.org/installer | php -- --install-dir=bin
全局安装
其实就是加入到path路径
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
使用Composer
install
命令解决和下载依赖
php composer.phar install
或者全局安装时
composer install
如果是 monolog
将会创建 vendor/monolog/monolog
目录
另一件事是 install 命令将创建一个 composer.lock 文件到你项目的根目录中。
composer.lock – 锁文件
在安装依赖后,Composer 将把安装时确切的版本号列表写入 composer.lock
文件。这将锁定改项目的特定版本。
请提交你应用程序的 composer.lock (包括 composer.json)到你的版本库中 install
命令将会检查锁文件是否存在,如果存在,它将下载指定的版本
composer update
php composer.phar update
如果只想安装或更新一个依赖,你可以白名单它们:
php composer.phar update monolog/monolog [...]
自动加载
require 'vendor/autoload.php';
你可以在 composer.json
的 autoload
字段中增加自己的 autoloader
。
{
"autoload": {
"psr-4": {"Acme\\": "src/"}
}
}
Composer
将注册一个 PSR-4 autoloader
到 Acme
命名空间。
你可以定义一个从命名空间到目录的映射。此时 src
会在你项目的根目录,与 vendor
文件夹同级。例如 src/Foo.php
文件应该包含 Acme\Foo
类。
添加 autoload
字段后,你应该再次运行 install
命令来生成 vendor/autoload.php
文件。
包
只要你有一个 composer.json 文件在目录中,那么整个目录就是一个包。当你添加一个 require 到项目中,你就是在创建一个依赖于其它库的包。你的项目和库之间唯一的区别是,你的项目是一个没有名字的包。
{
"name": "acme/hello-world",
"require": {
"monolog/monolog": "1.0.*"
}
}
平台软件包
- php 表示用户的 PHP 版本要求,你可以对其做出限制。例如 >=5.4.0。如果需要64位版本的 PHP,你可以使用 php-64bit 进行限制。
-
hhvm 代表的是 HHVM(也就是 HipHop Virtual Machine) 运行环境的版本,并且允许你设置一个版本限制,例如,’>=2.3.3’。
-
ext-\
可以帮你指定需要的 PHP 扩展(包括核心扩展)。通常 PHP 拓展的版本可以是不一致的,将它们的版本约束为 * 是一个不错的主意。一个 PHP 扩展包的例子:包名可以写成 ext-gd。 -
lib-\
允许对 PHP 库的版本进行限制。
以下是可供使用的名称:curl、iconv、icu、libxml、openssl、pcre、uuid、xsl。
composer show --platform
命令来获取可用的平台软件包的列表
指明版本
{
"version": "1.0.0"
}
注意: 你应该尽量避免手动设置版本号,因为标签的值必须与标签名相匹配。
标签
对于每一个看起来像版本号的标签,都会相应的创建一个包的版本。它应该符合 ‘X.Y.Z’ 或者 ‘vX.Y.Z’ 的形式,-patch、-alpha、-beta 或 -RC 这些后缀是可选的。在后缀之后也可以再跟上一个数字。如:v4.4.4beta2
分支
对于每一个分支,都会相应的创建一个包的开发版本。如果分支名看起来像一个版本号,那么将创建一个如同 {分支名}-dev 的包版本号。
别名
它表示一个包版本的别名。例如,你可以为 dev-master 设置别名 1.0.x-dev,这样就可以通过 require 1.0.x-dev 来得到 dev-master 版本的包。
锁文件
如果你愿意,可以在你的项目中提交 composer.lock 文件。他将帮助你的团队始终针对同一个依赖版本进行测试。任何时候,这个锁文件都只对于你的项目产生影响。
发布到 VCS
{
"name": "acme/blog",
"repositories": [
{
"type": "vcs",
"url": "https://github.com/username/hello-world"
}
],
"require": {
"acme/hello-world": "dev-master"
}
}
发布到 packagist
Packagist 类似于Maven中央仓库