Composer 是一个 PHP 的包依赖关系管理工具,由 Nils Adermann 和 Jordi Boggiano 创立于2012年,经过4年多的发展,已经成为了 PHP 最主要的包依赖关系管理工具,packagist.org 上整理了 Composer 支持的资源包,数据统计:
Packages registered 129 005
Versions available 762 517
Packages installed 3 915 581 000 (since 2012-04-13)
更详细的数据可以访问:https://packagist.org/statistics
截止目前每周安装量在6000万,离 npm 每周十几亿的安装量,还有不小的差距
npm 的安装数据统计:http://blog.npmjs.org/tagged/stats
在 wikipedia 上可以找到各种语言的包管理工具:
https://en.wikipedia.org/wiki/List_of_software_package_management_systems
如果可以比较不同语言的包下载量的统计,也会是比较有意思的数据
随着近几年移动互联网的高速,PHP 进入了很长一段时间的酱油期,等候自身底层技术的成熟(PHP7、Composer、PHP-FIG、Laravel),伺机寻找新的机会,比如在企业级 web 市场上挑战 Java,或者在移动端上给各类前端打打下手,等待优秀产品的爆发(比如工具类的:phabricator)。在我看来,PHP 语言最大的优势并不在技术发展期,而在于产品发展期,所以静观回潮就可以
Composer 最大的价值,是让原本松散的社区在代码的层面进行合作,PHP 社区本来就比较分散,Composer 和 PHP-FIG 的完善,非常符合每一个优秀码农的哲学观,也就是 Linus Torvalds 创立 Git 时的目标:为了孤独的工作
关于 Composer 的 logo 的讨论也很有意思,音乐家?作曲家?指挥家?谁呢?贝多芬?
https://github.com/composer/getcomposer.org/issues/36
Composer 的安装很简单:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === 'e115a8dc7871f15d853148a7fbac7da27d6c0030b848d9b3dc09e2a0388afed865e6a3d6b3c0fad45c48e2b5fc1196ae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
mv composer.phar /usr/local/bin/composer
确认是否有安装成功:
composer --version 显示:Composer version 1.3.2 2017-01-27 18:23:41
以后的更新也很简单:
composer self-update
除了对自己的更新以外,Composer 对于全局安装和当前目录的程序也有不同的更新方式:
composer global update // 全局安装更新 composer update // 当前目录下的程序更新
Composer 并不是以下载安装包源文件的形式安装,而是直接从版本控制系统中直接拉取相关的版本进行安装,支持的版本管理系统有:git/svn/hg/fossil(再次感觉到了 git 的强大,Coding 这样的项目未来只有企业级市场,也是可以理解的)
为了提升访问的速度,Composer 可以用这个国内的镜像:
https://pkg.phpcomposer.com/
Laravel
用 Composer 安装 Laravel 就很简单,先安装一个 laravel 的安装包:
composer global require "laravel/installer"
再到一个你设定的目录下面去跑一条 laravel 命令:
laravel new project-name
Laravel 的安装根目录下面会有一个 composer.json 文件表示 Laravel 的直接依赖关系,有一个 composer.lock 文件表示所有已经安装的组件的配置信息,这两个文件非常的关键,官方建议是保存在版本控制系统中,这样任何新用户就可以根据这两个文件的内容,创建出整个的开发环境
Composer 在安装完包以后会创建一些文件以提供 autoload 功能:
/vendor/autoload.php
/vendor/composer/autoload_classmap.php
/vendor/composer/autoload_files.php
/vendor/composer/autoload_namespaces.php
/vendor/composer/autoload_psr4.php
/vendor/composer/autoload_real.php
/vendor/composer/autoload_static.php
/vendor/composer/ClassLoader.php
外部程序可以方便的调用 autoload.php 这个文件来调用通过 Composer 安装进来的这些包,假设你通过 Composer 安装了 Monolog 以后:
require __DIR__ . '/vendor/autoload.php'; $log = new Monolog\Logger('name'); $log->pushHandler(new Monolog\Handler('app.log', Monolog\Logger::WARNING)); $log->addWarning('Foo');
如果你希望自己来处理所有文件相关的 autoload,那么直接引入这些文件就可以:
/vendor/composer/autoload_*.php
包开发
自己创建一个包的方式也非常的简单,在 git 上创建好项目,按照 PHP-FIG 的 autoload 规范创建好程序,撰写好依赖关系文件 composer.json,最后发布到 packagist.org 上就可以被别人调用了
由于 Composer 是基于命令行展开工作的,所以有提供一套参数,具体看官方文档:
https://getcomposer.org/doc/03-cli.md
有完整的中文翻译:
http://docs.phpcomposer.com/03-cli.html
Composer 配置文件中相关内容的说明:
https://getcomposer.org/doc/04-schema.md
中文翻译版本:
http://docs.phpcomposer.com/04-schema.html