• 售前

  • 售后

热门帖子
入门百科

PHP创建自己的Composer包方法

[复制链接]
老三是叔叔 显示全部楼层 发表于 2021-10-25 19:52:49 |阅读模式 打印 上一主题 下一主题
仓库(Repository)

仓库是软件开辟中常见的概念,与源(sources)意义相近,重要指托管资源的场合。很多软件都有仓库的概念,比方yum、npm、maven、Git,以及本文的主角Composer。仓库以中心化的方式托管资源,为软件的正常工作提供保障。
Packagist 是Composer默认的中心仓库,PHP社区的绝大部分Composer包都托管在该网站上。Packagist提供公开的、免费的托管服务,任何人均可注册、自由发布包,无需审核。Packagist由Private Packagist提供托管和维护,两者的重要区别为:Packagist的官网是https://packagist.org,托管...,托管的代码无需开源,仓库服务器可位于内网,提供更快、更高效的包代码托管服务。
可以设置多个仓库,Composer会主动找出最恰当项目标依赖包。搜索包的流程如下:起首查抄当前项目是否设置额外仓库,有则优先在额外仓库中检索;无效果向上到全局设置中的额外仓库检索;未设置或搜索无效果的环境下,回退到默认的Packagist中心仓库检索。除非禁用了默认的仓库,Packagist中的包总会被检索到。由于这个缘故原由,Composer保举PHP开辟职员将包托管在Packagist网站上,方便他人检索和引用。
设置仓库

有两种方法对Composer的仓库进行设置:命令行和编辑设置文件。composer config是Composer设置的命令,可以用来设置项目或全局的仓库信息,比方:
composer config [-g] repo.packagist composer https://packagist.phpcomposer.com

第二种方法是编辑设置文件。编辑项目标composer.json或~/.config/composer/config.json,增长repositories一项设置,比方:
  1. "repositories": {
  2.   "packagist": {
  3.     "type": "composer",
  4.     "url": "https://packagist.phpcomposer.com"
  5.   }
  6. }
复制代码
以上设置利用 Packagist中国全量镜像 网站作为默认中心仓库。在大陆地区部署PHP项目,建议利用该仓库目次,能加速依赖包的下载。
仓库设置最重要的两个参数是type和url。type指明仓库的范例,url则指向详细网址。根据仓库的位置,常用的type可选值有:
      
  • composer,Composer包托管仓库,比方 Packagist中国全量镜像;  
  • vcs,版本控制管理系统,比方Github上的项目地点;  
  • pear,PEAR上的包;  
  • package,位于互联网上包;  
  • artifact,代码zip包合集;  
  • path,指向代码详细位置。
互联网上的仓库,type的常见值是composer和vcs;当地的项目,常见值是artifact和path。详细用例,可参考Composer官方文档。
把握了仓库的概念和其设置,接下来我们创建本身的包。
创建本身的Composer包

创建一个Composer包只需两步:1. 填写包形貌信息;2. 写代码。本文创建一个hello-composer的包来演示创建过程。该包功能只有一个:输出字符串“Hello, Composer!”。
Composer包的形貌信息存放在composer.json文件中,可直接新建(或从其他项目拷贝)composer.json文件,手动填充必要的字段信息;也可以用composer init命令,交互式的输入包信息,天生composer.json文件后再补全其他字段信息。我们接纳直接编辑文件的方式,在composer.json中输入如下内容:
  1. {
  2.   "name": "tlanyan/hello-composer",
  3.   "description": "Hello, Composer!",
  4.   "type": "library",
  5.   "require": {
  6.     "php": ">=7.0"
  7.   },
  8.   "license": "MIT",
  9.   "authors": [
  10.     {
  11.       "name": "tlanyan",
  12.       "email": "tlanyan@hotmail.com"
  13.     }
  14.   ],
  15.   "minimum-stability": "stable",
  16.   "autoload": {
  17.     "psr-4": {
  18.       "tlanyan\": "src/"
  19.     }
  20.   }
  21. }
复制代码
以上内容根本上是一个Composer包的必备字段。其他字段可参考Composer官网的composer.json说明。需留意标记为root-only的字段,root-only表现当前包为主项目时才见效。比方require-dev字段,在当前项目中开辟,字段内的包会下载放到vendor文件夹内;如果该项目被其他项目引用,则该字段的值被忽略,引用的包不会被下载。
接下来编写代码。在src目次下新建HelloComposer.php:
  1. namespace tlanyan;
  2. class HelloComposer
  3. {
  4.   public static function greet()
  5.   {
  6.     echo "Hello, Composer!", PHP_EOL;
  7.   }
  8. }
复制代码
代码风格建议参考PSR-2规范,文件定名和路径规范建议参考PSR-4规范。别的需留意文件的路径需与composer.json中autoload的值相匹配。
通过简单两步,我们创建的本身的Composer包。接下来在其他项目中引用该包。
引用Composer包

新建一个test项目,引用上文创建的包并查看效果,步骤如下:
1.新建test文件夹,拷贝或者新建composer.json文件,设置如下:
  1.   {
  2.     ....
  3.     "require": {
  4.       "tlanyan/hello-composer": "*"
  5.     },
  6.     "minimum-stability": "dev",
  7.     "repositories": {
  8.       "local": {
  9.         "type": "path",
  10.         "url": "/path/to/hello-composer"
  11.       }
  12.     },
  13.     ....
  14.   }
复制代码
设置文件需要留意两点: 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类:
  1.   namespace test;
  2.   
  3.   require "vendor/autoload.php";
  4.   
  5.   use tlanyan\HelloComposer;
  6.   
  7.   class Test
  8.   {
  9.     public static main()
  10.     {
  11.       HelloComposer::greet();
  12.     }
  13.   }
  14.   
  15.   Test::main();
复制代码
.实验Test.php:php Test.php,输出"Hello, Composer!"。
通过设置Composer仓库,我们乐成引用了创建的hello-composer包。测试没问题后,就可以发布到网上供其他人利用。下面扼要说是发布流程。
发布Composer包

将Composer包发布到互联网的方式有几种:
      
  • 打包成zip,上传到恣意一个可公开访问的网站;  
  • 通过版本控制软件,上传到代码仓库;  
  • 提交到PEAR社区;  
  • 提交到私有的Composer仓库;  
  • 提交到Packagist。
前四种方式,需要用户设置仓库信息才能检索到包(PEAR社区几乎已死,可以忽略)。如果代码开源,建议提交到Packagist,方便全天下的PHP开辟者检索和利用,为Composer生态做贡献。
提交包到Packagist,要经历以下过程:
      
  • 在Github创建项目并提交代码;  
  • 在Packagist输入项目地点提交包;  
  • 在Github设置项目,触发Packagist主动更新。
前两步是必须的,第三步可选。本着为提交的包负责的态度,猛烈建议完成第三步操作。
提交包的过程涉及到Github和Packagist两个站点,Github和Packagist之间的关系为:Github托管实际的代码和文件;Packagist托管包的作者、包名、版本号、下载量等元数据保。扼要说Packagist是索引,Github是内容提供方。
详细步骤可参考官网指引或网上教程,网上相干内容太多,本文不再重复。
总结

本文介绍了Composer仓库的概念,创建了一个完备的Composer包,并给出提交包到Packagist的指引。用户把握相干概念和运行机制后,可提交代码为社区做贡献,也可跳出Packagist自由的引用和安装依赖包。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作