学习笔记《Composer》

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容