转载请注明文章出处:tlanyan.me/php-review-…php
前文 PHP回顾之Composer 简要介绍了Composer的相关概念和简要用法,应付平常开发已无大碍。想要更好的利用Composer协同工做,学会建立本身的Composer包是一项必不可少的技能。本文先讲解Composer仓库的概念,再给出建立和发布Composer包的步骤。git
仓库是软件开发中常见的概念,与源(sources)意义相近,主要指托管资源的场所。许多软件都有仓库的概念,例如yum、npm、maven、Git,以及本文的主角Composer。仓库以中心化的方式托管资源,为软件的正常工做提供保障。github
Packagist 是Composer默认的中央仓库,PHP社区的绝大部分Composer包都托管在该网站上。Packagist提供公开的、免费的托管服务,任何人都可注册、自由发布包,无需审核。Packagist由Private Packagist提供托管和维护,二者的主要区别为:Packagist的官网是packagist.org,托管开源代码,面向公众提供免费包托管服务;Private Packagist的官网是packagist.com,托管的代码无需开源,仓库服务器可位于内网,提供更快、更高效的包代码托管服务。web
能够配置多个仓库,Composer会自动找出最适合项目的依赖包。搜索包的流程以下:首先检查当前项目是否配置额外仓库,有则优先在额外仓库中检索;无结果向上到全局配置中的额外仓库检索;未配置或搜索无结果的状况下,回退到默认的Packagist中央仓库检索。除非禁用了默认的仓库,Packagist中的包总会被检索到。由于这个缘由,Composer推荐PHP开发人员将包托管在Packagist网站上,方便他人检索和引用。数据库
有两种方法对Composer的仓库进行配置:命令行和编辑配置文件。composer config
是Composer配置的命令,能够用来配置项目或全局的仓库信息,例如:npm
composer config [-g] repo.packagist composer https://packagist.phpcomposer.com
复制代码
第二种方法是编辑配置文件。编辑项目的composer.json
或~/.config/composer/config.json
,增长repositories
一项配置,例如:json
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
}
复制代码
以上配置使用 Packagist中国全量镜像 网站做为默认中央仓库。在大陆地区部署PHP项目,建议使用该仓库目录,能加速依赖包的下载。bash
仓库配置最重要的两个参数是type
和url
。type
指明仓库的类型,url
则指向具体网址。根据仓库的位置,经常使用的type
可选值有:服务器
互联网上的仓库,type
的常见值是composer
和vcs
;本地的项目,常见值是artifact
和path
。具体用例,可参考Composer官方文档。cookie
掌握了仓库的概念和其配置,接下来咱们建立本身的包。
建立一个Composer包只需两步:1. 填写包描述信息;2. 写代码。本文建立一个hello-composer
的包来演示建立过程。该包功能只有一个:输出字符串“Hello, Composer!
”。
Composer包的描述信息存放在composer.json
文件中,可直接新建(或从其余项目拷贝)composer.json
文件,手动填充必要的字段信息;也能够用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.com"
}
],
"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包。接下来在其余项目中引用该包。
新建一个test项目,引用上文建立的包并查看效果,步骤以下:
composer.json
文件,配置以下:{
....
"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
。
执行composer install -vvv
安装依赖包,安装完成后vendor目录下生成tlanyan/hello-composer
目录。
在test中新建Test.php文件,引用HelloComposer类:
namespace test;
require "vendor/autoload.php";
use tlanyan\HelloComposer;
class Test
{
public static main()
{
HelloComposer::greet();
}
}
Test::main();
复制代码
php Test.php
,输出"Hello, Composer!
"。经过配置Composer仓库,咱们成功引用了建立的hello-composer
包。测试没问题后,就能够发布到网上供其余人使用。下面简要说是发布流程。
将Composer包发布到互联网的方式有几种:
前四种方式,须要用户配置仓库信息才能检索到包(PEAR社区几乎已死,能够忽略)。若是代码开源,建议提交到Packagist,方便全世界的PHP开发者检索和使用,为Composer生态作贡献。
提交包到Packagist,要经历如下过程:
前两步是必须的,第三步可选。本着为提交的包负责的态度,强烈建议完成第三步操做。
提交包的过程涉及到Github和Packagist两个站点,Github和Packagist之间的关系为:Github托管实际的代码和文件;Packagist托管包的做者、包名、版本号、下载量等元数据保。简要说Packagist是索引,Github是内容提供方。
详细步骤可参考官网指引或网上教程,网上相关内容太多,本文再也不重复。
本文介绍了Composer仓库的概念,建立了一个完整的Composer包,并给出提交包到Packagist的指引。用户掌握相关概念和运行机制后,可提交代码为社区作贡献,也可跳出Packagist自由的引用和安装依赖包。