PHP创建⾃⼰的Composer包⽅法
仓库(Repository)
仓库是软件开发中常见的概念,与源(sources)意义相近,主要指托管资源的场所。许多软件都有仓库的概念,例如yum、npm、maven、Git,以及本⽂的主⾓Composer。仓库以中⼼化的⽅式托管资源,为软件的正常⼯作提供保障。
可以配置多个仓库,Composer会⾃动出最适合项⽬的依赖包。搜索包的流程如下:⾸先检查当前项⽬是否配置额外仓库,有则优先在额外仓库中检索;⽆结果向上到全局配置中的额外仓库检索;未配置或搜索⽆结果的情况下,回退到默认的Packagist中央仓库检索。除⾮禁⽤了默认的仓库,Packagist中的包总会被检索到。因为这个原因,Composer推荐PHP开发⼈员将包托管在Packagist⽹站上,⽅便他⼈检索和引⽤。
配置仓库
有两种⽅法对Composer的仓库进⾏配置:命令⾏和编辑配置⽂件。composer config是Composer配置的命令,可以⽤来配置项⽬或全局的仓库信息,例如:
第⼆种⽅法是编辑配置⽂件。编辑项⽬的composer.json或~/.config/composer/config.json,增加repositori
es⼀项配置,例如:
"repositories": {
"packagist": {
"type": "composer",
"url": "packagist.phpcomposer"
}
}
以上配置使⽤⽹站作为默认中央仓库。在⼤陆地区部署PHP项⽬,建议使⽤该仓库⽬录,能加速依赖包的下载。
仓库配置最重要的两个参数是type和url。type指明仓库的类型,url则指向具体⽹址。根据仓库的位置,常⽤的type可选值有:
1. composer,Composer包托管仓库,例如 Packagist中国全量镜像;
2. vcs,版本控制管理系统,例如Github上的项⽬地址;
3. pear,PEAR上的包;
4. package,位于互联⽹上包;
5. artifact,代码zip包合集;
6. path,指向代码具体位置。
互联⽹上的仓库,type的常见值是composer和vcs;本地的项⽬,常见值是artifact和path。具体⽤例,可参考Composer官⽅⽂档。
掌握了仓库的概念和其配置,接下来我们创建⾃⼰的包。
创建⾃⼰的Composer包
创建⼀个Composer包只需两步:1. 填写包描述信息;2. 写代码。本⽂创建⼀个hello-composer的包来演⽰创建过程。该包功能只有⼀个:输出字符串“Hello, Composer!”。
Composer包的描述信息存放在composer.json⽂件中,可直接新建(或从其他项⽬拷贝)composer.jso
n⽂件,⼿动填充必要的字段信息;也可以⽤composer init命令,交互式的输⼊包信息,⽣成composer.json⽂件后再补全其他字段信息。我们采取直接编辑⽂件的⽅式,在composer.json中输⼊如下内容:
{
"name": "tlanyan/hello-composer",
"description": "Hello, Composer!",
"type": "library",
"require": {
"php": ">=7.0"
},
"license": "MIT",
"authors": [
{
"name": "tlanyan",
"email": "tlanyan@hotmail"
}
],
"minimum-stability": "stable",
"autoload": {
"psr-4": {
"tlanyan\\": "src/"
}
}
}
以上内容基本上是⼀个Composer包的必备字段。其他字段可参考Composer官⽹的composer.json说明。需注意标记为root-only的字段,root-only表⽰当前包为主项⽬时才⽣效。例如require-dev字段,在当前项⽬中开发,字段内的包会下载放到vendor⽂件夹内;如果该项⽬被其他项⽬引⽤,则该字段的值被忽略,引⽤的包不会被下载。
接下来编写代码。在src⽬录下新建HelloComposer.php:
namespace tlanyan;
class HelloComposer
{
public static function greet()
{
echo "Hello, Composer!", PHP_EOL;
}
}
代码风格建议参考PSR-2规范,⽂件命名和路径规范建议参考PSR-4规范。另外需注意⽂件的路径需与composer.json中autoload的值相匹配。
通过简单两步,我们创建的⾃⼰的Composer包。接下来在其他项⽬中引⽤该包。
引⽤Composer包
新建⼀个test项⽬,引⽤上⽂创建的包并查看效果,步骤如下:
1.新建test⽂件夹,拷贝或者新建composer.json⽂件,配置如下:
{
....
php软件安装包"require": {
"tlanyan/hello-composer": "*"
},
"minimum-stability": "dev",
"repositories": {
"local": {
"type": "path",
"url": "/path/to/hello-composer"
}
},
....
}
配置⽂件需要注意两点: 1. 如果hello-composer的composer.json⽂件没有version字段(或不是稳定版)
,minimum-stability 值要是dev(默认是stable),否则⽆法安装; 2. 需添加⾃定义仓库,type值为path。
2.执⾏composer install -vvv安装依赖包,安装完成后vendor⽬录下⽣成tlanyan/hello-composer⽬录。
3.在test中新建Test.php⽂件,引⽤HelloComposer类:
namespace test;
require "vendor/autoload.php";
use tlanyan\HelloComposer;
class Test
{
public static main()
{
HelloComposer::greet();
}
}
Test::main();
.执⾏Test.php:php Test.php,输出"Hello, Composer!"。
通过配置Composer仓库,我们成功引⽤了创建的hello-composer包。测试没问题后,就可以发布到⽹上供其他⼈使⽤。下⾯
简要说是发布流程。
发布Composer包
将Composer包发布到互联⽹的⽅式有⼏种:
1. 打包成zip,上传到任意⼀个可公开访问的⽹站;
2. 通过版本控制软件,上传到代码仓库;
3. 提交到PEAR社区;
4. 提交到私有的Composer仓库;
5. 提交到Packagist。
前四种⽅式,需要⽤户配置仓库信息才能检索到包(PEAR社区⼏乎已死,可以忽略)。如果代码开源,建议提交到Packagist,⽅便全世界的PHP开发者检索和使⽤,为Composer⽣态做贡献。
提交包到Packagist,要经历以下过程:
1. 在Github创建项⽬并提交代码;
2. 在Packagist输⼊项⽬地址提交包;
3. 在Github配置项⽬,触发Packagist⾃动更新。
前两步是必须的,第三步可选。本着为提交的包负责的态度,强烈建议完成第三步操作。
提交包的过程涉及到Github和Packagist两个站点,Github和Packagist之间的关系为:Github托管实际的代码和⽂件;Packagist托管包的作者、包名、版本号、下载量等元数据保。简要说Packagist是索引,Github是内容提供⽅。
详细步骤可参考官⽹指引或⽹上教程,⽹上相关内容太多,本⽂不再重复。
总结
本⽂介绍了Composer仓库的概念,创建了⼀个完整的Composer包,并给出提交包到Packagist的指引。⽤户掌握相关概念和运⾏机制后,可提交代码为社区做贡献,也可跳出Packagist⾃由的引⽤和安装依赖包。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论