咱们一直在使用别人发布的扩展,是否想过本身发布一个?php
今天就来聊聊如何发布一个composer扩展及其注意事项。html
是的,既然咱们在使用一个composer扩展的时候根据一份composer.json来安装依赖包,那么咱们发布扩展包的时候,也应该先有一份描述本身的清单 - composer.json。git
你可能会问,我如今开发的系统使用了composer来安装依赖,我本身项目根目录下也有一个composer.json,那个人项目是一个扩展包么?github
是的,你的项目也是一个包,可是此刻它不能发布、不能被别人经过composer安装,由于它少了一个最重要的元素 ---- 名字。json
就是咱们以前讲的composer.json中的name,具体name的约定我想你已经经过以前的学习了解了吧,不懂能够看看速查表传送门yii2
若是你不知道拿什么做为供应商的名称, 那么使用你 github 上的用户名一般是不错的选择。 虽然包名不区分大小写,但惯例是使用小写字母,并用连字符做为单词的分隔。composer
好比下面的写法都是不错的yii
为了给使用者和composer提供更多的东西,你应该保证你的包有足够准确的说明和限制,具体composer.json各项说明你们能够参考以前的几篇文章phpstorm
固然,composer也为咱们提供了 init 命令,一问一答式的帮咱们创建composer.json,这样更简单。ide
先说结构吧,一个包是应该有测试文档、有源代码、有说明文档,甚至还要有一些例子,因此将一堆文件放到一个文件夹并非好的结构,我通常喜欢以下的写法,不过这不局限,思路能够理清楚就是好的结构。
个人结构以下
-src/
--src/Emoji.php
--src/Event.php
--src/....
-test/
--test/a.php
--test/b.php
--test/...
-example/
--example/example01.php
--example/example02.php
--example/...
-README.md
-composer.json复制代码
而关于自动加载方式,若是是一个新的扩展,我喜欢也推荐用psr-4规范。
那就须要在composer.json有以下定义
"autoload": {
"psr-4": {
"abei2017\\emoji\\": "src"
}
}复制代码
具体psr-4的规范能够去官网看一下,composer安装了你的扩展后,映射关系会出如今 vendor\composer\autoload_psr4.php 文件内容中。
我在此处把abei2017/yii2-emoji的composer.json说明下,帮助你们理解。
{
"name": "abei2017/yii2-emoji",
"description": "一个yii2的emoji扩展",
"type": "yii2-extension",
"keywords": ["yii2","extension"],
"license": "MIT",
"authors": [
{
"name": "abei",
"email": "abei@nai8.me"
}
],
"require": {
"yiisoft/yii2": "*",
"emojione/emojione": "^3.1"
},
"autoload": {
"psr-4": {
"abei2017\\emoji\\": "src"
}
}
}复制代码
简要说明以下
而后在github上创建一个空的仓库,记住仓库git地址。回到咱们机器上的扩展目录,执行git操做。
>git init
>git remote set-url origin --push --add git@github.com:abei2017/xxx.git
> git add .
> git commit
> git push origin master复制代码
固然你若是使用phpstorm,这一切会更简单。传送门
总之,你如今将本地文件git到了远程的仓库。
coding...coding...coding
通过无数个夜晚,你完成了扩展的功能。
而后咱们在github上为它创建了一个版本,叫作1.0
你们都知道,Packagist(packagist.org/)是composer的…
注册帐号
首先咱们要在Packagist上注册一个帐号,过程十分简单,这年头谁还没注册过呀。
submit
而后点击右上角的submit(packagist.org/packages/su… ) 提交便可。Packagist能自动识别git/svn,你只须要提交github的仓库地址。
一下子,Packagist就完成了本身的分析和采集,你就能够经过 composer require xxx 使用了。国内镜像用户要慢些,镜像要每隔一点时间采集一次Packagist上的包。
过了一段时间,你的包有了新版本,可能在github上新建了2.0版本,这儿时候回到你在 Packagist 上的此包页面,点击下update便可,固然你也能够经过GitHub Service Hook实现自动update
到这里,你就成功的发布了你的包,简单吧。