安装 Composer,你只须要下载 composer.phar
可执行文件。php
curl -sS https://getcomposer.org/installer | php
详细请查看 简介 章节。html
要检查 Composer 是否正常工做,只须要经过 php
来执行 PHAR:git
php composer.phar
这将返回给你一个可执行的命令列表。web
注意: 你也能够仅执行
--check
选项而无需下载 Composer。 要获取更多的信息请使用--help
。编程curl -sS https://getcomposer.org/installer | php -- --help
composer.json
:项目安装要开始在你的项目中使用 Composer,你只须要一个 composer.json
文件。该文件包含了项目的依赖和其它的一些元数据。json
这个 JSON format 是很容易编写的。它容许你定义嵌套结构。数组
require
Key第一件事情(而且每每只须要作这一件事),你须要在 composer.json
文件中指定 require
key 的值。你只须要简单的告诉 Composer 你的项目须要依赖哪些包。服务器
{ "require": { "monolog/monolog": "1.0.*" } }
你能够看到, require
须要一个 包名称 (例如 monolog/monolog
) 映射到 包版本 (例如 1.0.*
) 的对象。app
包名称由供应商名称和其项目名称构成。一般容易产生相同的项目名称,而供应商名称的存在则很好的解决了命名冲突的问题。它容许两个不一样的人建立一样名为 json
的库,而以后它们将被命名为 igorw/json
和 seldaek/json
。composer
这里咱们须要引入 monolog/monolog
,供应商名称与项目的名称相同,对于一个具备惟一名称的项目,咱们推荐这么作。它还容许之后在同一个命名空间添加更多的相关项目。若是你维护着一个库,这将使你能够很容易的把它分离成更小的部分。
在前面的例子中,咱们引入的 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.2 |
这对于遵循语义化版本号的项目很是有用。~1.2 至关于>=1.2,<2.0 。想要了解更多,请阅读下一小节。 |
~
最好用例子来解释: ~1.2
至关于 >=1.2,<2.0
,而 ~1.2.3
至关于 >=1.2.3,<1.3
。正如你所看到的这对于遵循 语义化版本号 的项目最有用。一个常见的用法是标记你所依赖的最低版本,像 ~1.2
(容许1.2以上的任何版本,但不包括2.0)。因为理论上直到2.0应该都没有向后兼容性问题,因此效果很好。你还会看到它的另外一种用法,使用 ~
指定最低版本,但容许版本号的最后一位数字上升。
注意: 虽然
2.0-beta.1
严格地说是早于2.0
,可是,根据版本约束条件, 例如~1.2
却不会安装这个版本。就像前面所讲的~1.2
只意味着.2
部分能够改变,可是1.
部分是固定的。
默认状况下只有稳定的发行版才会被考虑在内。若是你也想得到 RC、beta、alpha 或 dev 版本,你可使用 稳定标志。你能够对全部的包作 最小稳定性 设置,而不是每一个依赖逐一设置。
获取定义的依赖到你的本地项目,只须要调用 composer.phar
运行 install
命令。
php composer.phar install
接着前面的例子,这将会找到 monolog/monolog
的最新版本,并将它下载到 vendor
目录。 这是一个惯例把第三方的代码到一个指定的目录 vendor
。若是是 monolog 将会建立 vendor/monolog/monolog
目录。
小技巧: 若是你正在使用Git来管理你的项目, 你可能要添加
vendor
到你的.gitignore
文件中。 你不会但愿将全部的代码都添加到你的版本库中。
另外一件事是 install
命令将建立一个 composer.lock
文件到你项目的根目录中。
composer.lock
- 锁文件在安装依赖后,Composer 将把安装时确切的版本号列表写入 composer.lock
文件。这将锁定改项目的特定版本。
请提交你应用程序的 composer.lock
(包括 composer.json
)到你的版本库中
这是很是重要的,由于 install
命令将会检查锁文件是否存在,若是存在,它将下载指定的版本(忽略 composer.json
文件中的定义)。
这意味着,任何人创建项目都将下载与指定版本彻底相同的依赖。你的持续集成服务器、生产环境、你团队中的其余开发人员、每件事、每一个人都使用相同的 依赖,从而减轻潜在的错误对部署的影响。即便你独自开发项目,在六个月内从新安装项目时,你也能够放心的继续工做,即便从那时起你的依赖已经发布了许多新 的版本。
若是不存在 composer.lock
文件,Composer 将读取 composer.json
并建立锁文件。
这意味着若是你的依赖更新了新的版本,你将不会得到任何更新。此时要更新你的依赖版本请使用 update
命令。这将获取最新匹配的版本(根据你的 composer.json
文件)并将新版本更新进锁文件。
php composer.phar update
若是只想安装或更新一个依赖,你能够白名单它们:
php composer.phar update monolog/monolog [...]
注意: 对于库,并不必定建议提交锁文件 请参考:库的锁文件.
packagist 是 Composer 的主要资源库。 一个 Composer 的库基本上是一个包的源:记录了能够获得包的地方。Packagist 的目标是成为你们使用库资源的中央存储平台。这意味着你能够 require
那里的任何包。
当你访问 packagist website (packagist.org),你能够浏览和搜索资源包。
任何支持 Composer 的开源项目应该发布本身的包在 packagist 上。虽然并不必定要发布在 packagist 上来使用 Composer,但它使咱们的编程生活更加轻松。
对于库的自动加载信息,Composer 生成了一个 vendor/autoload.php
文件。你能够简单的引入这个文件,你会获得一个免费的自动加载支持。
require 'vendor/autoload.php';
这使得你能够很容易的使用第三方代码。例如:若是你的项目依赖 monolog,你就能够像这样开始使用这个类库,而且他们将被自动加载。
$log = new Monolog\Logger('name'); $log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING)); $log->addWarning('Foo');
你能够在 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
文件。
引用这个文件也将返回 autoloader 的实例,你能够将包含调用的返回值存储在变量中,并添加更多的命名空间。这对于在一个测试套件中自动加载类文件是很是有用的,例如。
$loader = require 'vendor/autoload.php'; $loader->add('Acme\\Test\\', __DIR__);
除了 PSR-4 自动加载,classmap 也是支持的。这容许类被自动加载,即便不符合 PSR-0 规范。详细请查看 自动加载-参考。
注意: Composer 提供了本身的 autoloader。若是你不想使用它,你能够仅仅引入
vendor/composer/autoload_*.php
文件,它返回一个关联数组,你能够经过这个关联数组配置本身的 autoloader。