文档章节

轻松发布一个自己的composer扩展

阿北2017
 阿北2017
发布于 2017/08/25 14:35
字数 1157
阅读 27
收藏 0

我们一直在使用别人发布的扩展,是否想过自己发布一个?

今天就来聊聊如何发布一个composer扩展及其注意事项。

从composer.json开始

是的,既然我们在使用一个composer扩展的时候根据一份composer.json来安装依赖包,那么我们发布扩展包的时候,也应该先有一份描述自己的清单 - composer.json。

你可能会问,我现在开发的系统使用了composer来安装依赖,我自己项目根目录下也有一个composer.json,那我的项目是一个扩展包么?

是的,你的项目也是一个包,但是此刻它不能发布、不能被别人通过composer安装,因为它少了一个最重要的元素 ---- 名字

就是我们之前讲的composer.json中的name,具体name的约定我想你已经通过之前的学习了解了吧,不懂可以看看速查表传送门

如果你不知道拿什么作为供应商的名称, 那么使用你 github 上的用户名通常是不错的选择。 虽然包名不区分大小写,但惯例是使用小写字母,并用连字符作为单词的分隔。

比如下面的写法都是不错的

  • abei2017/emoji
  • abei2017/yii2-emoji
  • china-go/emoji
  • china-go/yii2-emoji

为了给使用者和composer提供更多的东西,你应该保证你的包有足够准确的说明和限制,具体composer.json各项说明大家可以参考之前的几篇文章

当然,composer也为我们提供了 init 命令,一问一答式的帮我们建立composer.json,这样更简单。

代码结构和自动加载方式

先说结构吧,一个包是应该有测试文档、有源代码、有说明文档,甚至还要有一些例子,所以将一堆文件放到一个文件夹并不是好的结构,我一般喜欢如下的写法,不过这不局限,思路可以理清楚就是好的结构。

我的结构如下

-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"
        }
    }
}

简要说明如下

  • 名字为abei2017/yii2-emoji,abei2017是我github的名字
  • 采用MIT协议发布
  • yii2-emoji能运行要依赖于 yiisoft/yii2 和 emojione/emojione 的正确部署,见require
  • 自动加载采用psr-4,命名空间和扩展的src下文件一一映射

提交到github

然后在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(https://packagist.org/)是composer的扩展包列表站,这也是最后一步。

注册账号

首先我们要在Packagist上注册一个账号,过程十分简单,这年头谁还没注册过呀。

submit

然后点击右上角的submit(https://packagist.org/packages/submit ) 提交即可。Packagist能自动识别git/svn,你只需要提交github的仓库地址。

一会儿,Packagist就完成了自己的分析和采集,你就可以通过 composer require xxx 使用了。国内镜像用户要慢些,镜像要每隔一点时间采集一次Packagist上的包。

升级你的包

过了一段时间,你的包有了新版本,可能在github上新建了2.0版本,这儿时候回到你在 Packagist 上的此包页面,点击下update即可,当然你也可以通过GitHub Service Hook实现自动update

alt

到这里,你就成功的发布了你的包,简单吧。


© 著作权归作者所有

阿北2017
粉丝 68
博文 58
码字总数 74348
作品 0
洛阳
私信 提问
如何开发、本地测试、发布 Laravel 扩展包?

现在已经有了很多,关于如何开发 Laravel 扩展包的文章。但是大多文章写的太过片面,不够完整,而且我在实际进行开发扩展包的时候,还是遇到了很多的问题,我把自己的开发经验,以及遇到的问...

angkee
2018/01/10
0
0
教你如何写一个 Yii2 扩展

前言 把一系列相关联的功能使用模块开发,好处多多,维护起来很方便,模块还可以单独发布出去,让下一个项目之间使用,真是方便。 下面我就写一个开发扩展的简单教程。 Gii gii 自带帮助我们...

小田天
2016/11/17
254
0
php开源框架--CmlPHP

简介 CmlPHP从12年开始开发。从最早追求尽可能轻量,php5.2-的语法。到后面不断总结工作中碰到的实际的问题,加入工程化的一些东西。加入Composer的支持。加入了很多可以减少程序员开发时间的...

雨空
2013/09/11
6.5K
4
个人笔记------composer

Composer使用 是什么 如果你知道、、、等命令中的一种或者多种,那么,你也能很快知道是什么了。没错,它就是PHP里快速安装类库的。平时,我们安装一个PHP类库,需要;使用,我们只要知道包名...

ywppengpeng
2017/10/19
78
0
Go! 0.1.1 发布,PHP 的 AOP 库

Go! 0.1.1 增加介绍建议的支持,修复了 composer 自动加载的 bug,修复了 doctrine/common 依赖 >=2.0 < 2.4 的问题。 Go! 是一个 PHP 5.4 库,让 PHP 支持 AOP 面向方面编程方法,无需 PECL...

oschina
2013/01/22
1K
5

没有更多内容

加载失败,请刷新页面

加载更多

maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
今天
8
0
Linux创建yum仓库

第一步、搞定自己的光盘 #创建文件夹 mkdir -p /media/cdrom #挂载光盘 mount /dev/cdrom /media/cdrom #编辑配置文件使其永久生效 vim /etc/fstab 第二步,编辑yun源 vim /ect yum.repos.d...

究极小怪兽zzz
今天
6
0
jar 更新部分文件

C:\Program Files (x86)\Java\jdk1.8.0_102\bin>jar -hIllegal option: hUsage: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...Options: -c c......

圣洁之子
今天
9
0
OSChina 周六乱弹 —— 感谢女装红薯开办了这个网站

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @胖达panda:分享歌词: 我有一只小毛驴我从来也不骑,有一天我心血来潮骑着去赶集,我手里拿着小皮鞭我心里正得意,不知怎么哗啦啦,我摔了一...

小小编辑
今天
2.6K
13
DDD(四)

1,引言 软件开发者大多趋向于将关注点放在数据上,而不是领域上。这对于刚入门的DDD的新手而言也是如此。以我目前的思考方式,数据库依然占据主要的地位。开发一个功能,首先我就会考虑我会...

MrYuZixian
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部