composer的出现,使得PHPer可以像Java一样更加方便的管理代码。在composer没有出现之前,人们大多使用pear、pecl管理依赖,但是局限性很多,也很少有人用(接触的大多phper基本不适用pear管理依赖)。composer不仅仅能够解决依赖的问题,也可以在一定程度上解决造轮子的问题。

废话不多说,这篇主要记录如何创建自己的package。

大概步骤如下:

  1. 在github上创建一个项目(项目名称可以随意)
  2. 编写composer.json
  3. copy代码文件并修改命名空间
  4. https://packagist.org/上递交自己的包
  5. 设置github的hook

编写composer.json

先看一个示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
    "name": "jenner/message_queue",
    "description": "php message queue wrapper",
    "license": "MIT",
    "keywords": ["message queue"],
    "version": "1.0.0",
    "authors": [
        {
            "name": "Jenner",
            "email": "hypxm@qq.com"
        }
    ],
    "require": {
        "php": ">=5.3.0"
    },
 
    "autoload": {
        "psr-0": {
            "Jenner\\Zebra\\MessageQueue": "src/"
        }
    }
}

需要注意的几个字段说明如下:

name:包名称,递交时packagist会检测报名字是否合法。必须是一个/分隔的字符串。当别人引入你的包时,vendor下会自动创建这个目录。例如org/package包,则会在vender下创建org/package目录。

autoload:包的加载方式,具体加载方式可以参考composer中文网说明。这里使用的是psr-0标准加载方式。composer会在src目录下根据命名空间执行自动加载。

copy代码修改命名空间

composer.json文件修改后,我们需要把要打包的源文件复制过来。这里我把所有的文件放在了src目录下,后面可能会有和src同级的tests等目录,而这些目录是不会被加载的。src目录下需遵循psr-0标准。命名空间和目录定义要一直。例如Namespcae/SubNamespace命名空间,则src下必须有Namespace/SubNamespace目录。

代码编写标准可以参考psr-0、psr-1标准

递交自己的包

pacagist开放递交,你可以任意递交自己的包,当然,要符合一定规则。

packagist右上角有一个submit package的按钮,点击会跳转到递交页面,如下图:

然后在文本框中输入你在github上创建的项目的Git地址。packagist会自动检测是否合法。如果合法点击递交即可递交自己的包了。

你可能需要在github上面发布几个release,这样packagist才会认定你的包是稳定的,否则只能required开发包。

设置github的hook

版本控制工具大多支持hook,用于代码递交时触发一个事件,将代码同步到其他环境中。在github上设置hook后,我们每次pull,都会自动同步到packagist上,这样就不需要我们手动强制同步了。具体操作可以参见packgist的说明,操作很简单,耐心看下应该问题不大。

最后,如果别人使用了这个包。他的vendor目录下就会产生jenner/message_queue目录,其下的内容就是你github上的代码了,结构是完全一致的。

composer安装自己的包的更多相关文章

  1. 使用 Composer 安装Laravel扩展包的几种方法

    使用 Composer 安装Laravel扩展包的几种方法 以下的三种方法都是需要你在项目的根目录运行 第一种:composer install 如有 composer.lock 文件,直接安装,否则 ...

  2. Composer安装php插件包中有哪些坑

    Composer安装php插件包中有哪些坑 一.总结 一句话总结:不要盲从扩展官方的composer安装命令,有时候也会出错 我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自 ...

  3. 如何正确使用 Composer 安装 Laravel 扩展包

    我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自 这个文档 的: composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害. 因为 composer ...

  4. php composer 开发自己的包

    以往都是在项目直接写自己的包文件,并没有把他放在packagist上面,以composer来管理使用. 今天没事来整一下,供大家一起学习 一,在github和packagist分别注册自己的账号,这里 ...

  5. 发布一个PHP包到Packagist, 然后使用Composer安装

    Composer 能够方便的进行项目的依赖管理,  当我们发布一个包并且希望别人通过Composer安装的时候, 就需要将包发布到Composer的包仓库Packagist上面. 下面进行详细的说明一 ...

  6. composer安装扩展包异常

    我是tp5.1下,用composer安装扩展包,在命令行运行,无任何不反应,不下载也不报错,这时,我们先ctrl+c退出执行的命令,然后在tp5.1根目录下,找到composer.json文件,并用编 ...

  7. CodeIgniter 技巧 - 通过 Composer 安装 CodeIgniter 框架并安装依赖包

    PHP 项目中,通过 Composer 来管理各种依赖包,类似 Java 中的 Maven,或 Node 中的 npm.CodeIgniter 框架要想通过 Composer 自动加载包也很简单,步骤 ...

  8. 在linux上如何通过composer安装yii

      Composer可以理解成一个依赖管理工具 它能解决以下问题 a) 你有一个项目依赖于若干个库. b) 其中一些库依赖于其他库. c) 你声明你所依赖的东西. d) Composer 会找出哪个版 ...

  9. laravel 安装 Laravel 扩展包

    问题说明 我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自这个文档 的: composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害. 因为 comp ...

随机推荐

  1. [Q]将图纸转换为JPG、PNG、plt、DWF、DWFx,XPS等格式文件

    如要将图纸打印为图片,请选择“PublishToWeb JPG.pc3”或“PublishToWeb PNG.pc3”打印机. 如要将图纸打印为plt格式文件,请选择“Windows Default ...

  2. BestCoder 百度之星2016

    20160523 百度之星初赛第一场 1001 All X Problem Description F(x, m)F(x,m) 代表一个全是由数字xx组成的mm位数字.请计算,以下式子是否成立: F( ...

  3. 一个数组分四个ul并且每个ul里边有四个li显示

    <?php $a = $array; for($i=0;$i<4;$i++ ) {?> <ul class="new-hover"> <?php ...

  4. 面试题-Java基础-开发环境

    1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件.Java被设 ...

  5. java中equals方法和contentEquals方法区别

    java中,String类里提供了两种字符串的比较方式(算上“==”应该是三种) String line1 = new String("0123456789"); String l ...

  6. ios 显示其他app的购买页面

    using UnityEngine; using System.Collections; using System.Runtime.InteropServices ; public class IOS ...

  7. A*寻路算法 (cocos2d-js详细代码)

    看了几天的A*算法,感觉要成为一个游戏开发者,有必要把这个著名的算法拿到手. 网上有此算法的代码片段,但主要还是些模板类的伪代码,所以想分享一段完整的A*算法代码供大家更好的理解!(这里使用的是js语 ...

  8. 兼容 console 没删除引起 低级浏览器 报错问题

    /*重写connsole.log,防止调试代码出错*/if (!window.console){ var names = ["log", "debug", &q ...

  9. 寒假学干货之------初步布局Layout

    在开发的最初,需要设计好我们的Activity,在res/layout下,找到**activitymian(名字都差不多的)的.xml文件,打开他就可以开始编辑. http://www.tuicool ...

  10. JSONObject处理java.util.Date

    JSONObject的内容为: {"userId":"A000004FFDCE14","userName":"好好干g" ...