Composer
Composer 是 PHP 编程语言的一个应用程序级依赖管理器,它提供了一种用于管理 PHP 软件及其所需库之间依赖关系的标准格式[1][2]。Composer 由 Nils Adermann 和 Jordi Boggiano 开发,于 2012 年 3 月 1 日首次发布[1][2]。它并非像 Yum 或 Apt 那样的系统级包管理器,而是在单个项目的基础上管理依赖,通常将依赖安装到项目目录下的 `vendor` 文件夹中[3]。Composer 的设计受到了 Node.js 的 npm 和 Ruby 的 Bundler 的强烈启发[1][2]。
历史
Composer 由 Nils Adermann 和 Jordi Boggiano 于 2011 年 4 月开始开发,并于 2012 年 3 月 1 日首次发布第一个版本[1][2]。其诞生受到了 Node.js 的 npm 以及 Ruby 的 Bundler 的启发[1][2]。该项目的依赖关系解析算法最初源于 openSUSE 的 libzypp SAT 求解器的一个 PHP 移植版本[2][4]。Composer 的出现极大地改变了 PHP 开发者共享和管理代码的方式[5]。
Composer 2.x 版本于 2020 年 10 月发布,带来了显著的性能提升,尤其是在依赖解析方面。官方鼓励用户从 1.x 版本升级至 2.x 版本[6]。Composer 2.2 是长期支持(LTS)版本,支持 PHP 5.3.2 及更高版本,而更新的版本则要求 PHP 7.2.5 或更高版本[3][6]。
设计
核心概念
Composer 的核心是一个依赖管理工具。开发者通过在当前项目的根目录下创建一个 `composer.json` 文件,来声明项目所依赖的外部库及其版本约束[3][7]。Composer 随后会解析这些声明,计算出需要安装的精确版本,并将其下载到项目目录下的 `vendor` 文件夹中[3]。
依赖解析
Composer 的依赖解析过程涉及构建一个完整的依赖关系图。它会递归地分析 `composer.json` 文件中指定的每个依赖项及其自身的依赖,直到所有依赖关系都被解析[8]。Composer 利用 SAT(布尔可满足性问题)求解器来解决复杂的版本冲突问题,确保安装的软件包集合能够满足所有依赖约束[2]。
自动加载
Composer 不仅管理依赖的下载和安装,还提供了自动加载(autoload)功能。通过 Composer 生成的 `vendor/autoload.php` 文件,开发者可以轻松地自动加载所有已安装的第三方库,无需手动编写繁琐的 `require` 或 `include` 语句[7][2]。
生态系统
Packagist
[Packagist](https://packagist.org) 是 Composer 的默认主要软件包仓库[2][7]。开发者可以在这里发布自己的 PHP 包,供其他开发者通过 Composer 安装和使用[2]。
主要框架与库的支持
Composer 已成为现代 PHP 生态的基石,几乎所有主流 PHP 框架和库都通过 Composer 进行分发和管理[9]。这些框架包括但不限于 Symfony、Laravel、CodeIgniter、CakePHP、Drupal、TYPO3 和 Yii 等[2]。许多流行的 PHP 库,如 Guzzle(HTTP 客户端)、Carbon(日期处理)和 PHPUnit(测试框架),也通过 Composer 分发[9]。
版本历史
Composer 的主要版本发布历史如下:
参考文献
- ↑ 1.0 1.1 1.2 1.3 1.4 1.5 引用错误:
<ref>标签无效;未给name(名称)为wiki-zh的ref(参考)提供文本 - ↑ 2.00 2.01 2.02 2.03 2.04 2.05 2.06 2.07 2.08 2.09 2.10 引用错误:
<ref>标签无效;未给name(名称)为wiki-en的ref(参考)提供文本 - ↑ 3.0 3.1 3.2 3.3 3.4 3.5 Introduction - Composer
- ↑ About: Composer (software) - DBpedia
- ↑ Compile-N-Run/docs/language/php/... - GitHub
- ↑ 6.0 6.1 6.2 6.3 endoflife.date/products/composer.md - GitHub
- ↑ 7.0 7.1 7.2 PHP: Composer 简介 - Manual
- ↑ php composer的原理是什么 - 亿速云
- ↑ 9.0 9.1 Composer | Laravel - 为工匠和代理人打造的简洁技术栈