[NOTE-PHP]PHP依赖管理工具Composer详解

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

composer可以解决如下问题

a) 一个项目依赖于若干个库

b) 其中一些库依赖于其他库

c) 声明所依赖的东西

d) Composer找出哪个版本的包需要安装,并安装他们

声明依赖关系

比如使用monolog 那么只需创建composer.json文件

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+

安装

--install-dir 选项指定Composer的安装目录

全局安装

其实就是加入到path路径

使用Composer

install命令解决和下载依赖

或者全局安装时

如果是 monolog 将会创建 vendor/monolog/monolog 目录
另一件事是 install 命令将创建一个 composer.lock 文件到你项目的根目录中。

composer.lock – 锁文件

在安装依赖后,Composer 将把安装时确切的版本号列表写入 composer.lock 文件。这将锁定改项目的特定版本。

请提交你应用程序的 composer.lock (包括 composer.json)到你的版本库中 install 命令将会检查锁文件是否存在,如果存在,它将下载指定的版本

composer update

如果只想安装或更新一个依赖,你可以白名单它们:

自动加载

你可以在 composer.jsonautoload 字段中增加自己的 autoloader

Composer 将注册一个 PSR-4 autoloaderAcme 命名空间。

你可以定义一个从命名空间到目录的映射。此时 src 会在你项目的根目录,与 vendor 文件夹同级。例如 src/Foo.php 文件应该包含 Acme\Foo 类。

添加 autoload 字段后,你应该再次运行 install 命令来生成 vendor/autoload.php 文件。

只要你有一个 composer.json 文件在目录中,那么整个目录就是一个包。当你添加一个 require 到项目中,你就是在创建一个依赖于其它库的包。你的项目和库之间唯一的区别是,你的项目是一个没有名字的包。

平台软件包

  • 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 命令来获取可用的平台软件包的列表

指明版本

注意: 你应该尽量避免手动设置版本号,因为标签的值必须与标签名相匹配。

标签

对于每一个看起来像版本号的标签,都会相应的创建一个包的版本。它应该符合 ‘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

发布到 packagist

Packagist 类似于Maven中央仓库

命令行

0条留言