首页 > 代码库 > composer会成为主流么?
composer会成为主流么?
注意到composer是在最近学习一些github里面的项目时,发现很多都有composer.json,原来这货是为了composer包依赖管理工作而活的。其实它在前几年就出现了,只是那个时候PHP版本5.3以后的版本都慢慢兴起来,也就是命名空间才被引用。那,这货到底能干嘛呢?简单来说就是为你引入一个别人写好的功能包,并且为你做好自动加载,你只需要用php标准命名空间来初始化实例就行。可以看下中文的翻译介绍。
要理解好composer需要了解其它一些辅助工具,逐一来介绍下。预装好php环境,composer工具,这些得必须弄好的吧?
1. composer 安装
curl -sS http://getcomposer.org/installer| php -- --install-dir=/usr/local/php/bin cp /usr/local/php/bin/composer.phar /usr/bin/ composer about # 验证
2. composer.json
composer.json声明了包依赖以及声明元素标签,关键的就是require
{ "require": { "php": ">=5.3", "huamanshu/xorm": "dev-master" } }
如你所见,require的对象将会映射包的名称(huamanshu/xorm)和包的版本是dev-master。那,composer会拿huamanshu/xorm去哪得到相应的包呢?
3. packagist
依赖包名huamanshu/xorm
会到https://packagist.org去获取包。如果你是包的开发者,那你需要先注册一个账号,github亦如此,再提交你的包名到列表里去。
而packagist不是实际源码存储的地方,它只是自动同步github的项目https://github.com/meolu/xorm.git
4. github
开发者创建自己的项目,然后在setting里面配置hooks,填写packagist提供的name、token就可以在提交的时候,自动同步到packagist。
其中项目中composer.json跟上面用来引入包的composer.json不太一样,主要在autoload
,我范例使用的是PSR-4。
{ "name": "huamanshu/xorm", "type": "library", "require": { "php": ">=5.3.0" }, "autoload": { "psr-4": { "xorm\\":"src/xorm" } } }
5. PHP规范标准
最新的规范是有5个,简称PSR。
- PSR-0 自动加载
- PSR-1 基本代码规范
- PSR-2 代码样式
- PSR-3 日志接口
- PSR-4 自动加载增强版
现在composer里一般在使用PSR-0、PSR-4,后者是在13年底发布的,但相对前者简洁了很多,看个例子。
Composer使用PSR-0风格
vendor/ vendor_name/ package_name/ src/ Vendor_Name/ Package_Name/ ClassName.php # Vendor_Name\Package_Name\ClassName tests/ Vendor_Name/ Package_Name/ ClassNameTest.php # Vendor_Name\Package_Name\ClassName
Composer使用PSR-4风格
vendor/ vendor_name/ package_name/ src/ ClassName.php # Vendor_Name\Package_Name\ClassName tests/ ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest
6. 引入包
在开始新建的composer.json初始化下composer install
就会生成以下目录。
├── composer.json ├── composer.lock ├── test.php └── vendor ├── autoload.php ├── composer │ ├── autoload_classmap.php │ ├── autoload_namespaces.php │ ├── autoload_psr4.php │ ├── autoload_real.php │ ├── ClassLoader.php │ └── installed.json └── huamanshu └── xorm ├── composer.json ├── README.md └── src └── xorm └── Go.php
github项目xorm会加载到vendor下,并且生成自动加载文件autoload.php。这过程有点类似thrift,根据一个.thrift文件gen各种语言的接口。
7. 使用包
<?php require __DIR__ . ‘/vendor/autoload.php‘; $go = new xorm\Go(); $go->where(); # class Go‘s function where
8. 工程意义
除了packagist包,composer 也有平台的包,这些包是并不是由 comoposer 安装,它们是安装在操作系统上的东西,composer 将它们作为虚拟的包,以方便管理。它们包括:PHP 本身,PHP 的扩展,还有一些系统中的库。composer show --platform
即可看到。
composer提供这样一个包依赖管理方式对于PHP这样一个社区兴盛的语言,会类似python、java一样,有大量开发者提供了功能包,需要一个方便的机制来调用,版本更新切换、层级嵌套神马的。文件拷贝、代码复制粘贴的时代早已落伍,或许composer很快能一统江湖。无论是想做统计、日志、ORM等等,composer仓库里找找,几分钟后,轮子都已经装备完毕,就等点火启动,爽不?
composer会成为主流么?