如何创建一个可以用composer安装的php包

composer介绍

关于composer如何安装使用,大家可以到phpcomposer查看文档,这里介绍下如何写个可以使用composer安装的php包

写composer.json

新建一个空目录mkdir libfoo,在libfoo目录下新建一个composer.js文件,内容如下

{
    "name": "gangbo/foo",
    "description": "test description",
    "authors": [
        {
            "name": "gangbo",
            "email": "daigangbo@gmail.com"
        }
    ],
    "autoload": {
         "psr-4": {
            "gangbo\\foo\\": "src/",
            "gangbo\\foo\\test\\": "test/"
         }
    }
}

name 代表这个package的名字,由vendorname/packagename组成。
autoload 里面定义namespace和文件目录的对应关系,可以多个。

编写代码并提交到github

在libfoo/src/目录下新建一个Hello.php

<?php
namespace gangbo\foo;

class Hello
{
    public static function fn()
    {
        echo 'hello: ' . __METHOD__ . "\n";
    }
}

在libfoo/test/目录下新建一个Unit.php

<?php
namespace gangbo\foo\test;
class Unit
{
    public static function fn()
    {
        echo 'hello: ' . __METHOD__ . "\n";
    }
}

提交代码到github,需要提前在github上建好仓库

git init
git add *
git commit -m "init"
git remote add origin git@github.com:gangbo/foo.git
git pull origin master:master
git push origin master:master

提交到packagist

登陆到 packagist ,点击submit把我们的git地址https://packagist.org/packages/submit填写进去并提交。

安装使用

这时其它开发者就可以使用comoser安装你的包了
执行composer require gangbo/foo:dev-master,
这里必须加上dev-master,因为如果不加的话会默认安装该包的稳定版,因为我们这里还没有发布稳定版本。
写个脚本测试下

// test.php
//加载autoload
require __DIR__ . '/vendor/autoload.php';

use gangbo\foo\Hello;
use gangbo\foo\test\Unit;

Hello::fn();
Unit::fn();

执行php test.php 输出结果

hello: gangbo\foo\Hello
hello: gangbo\foo\test\Unit::fn

说明调用成功。

如何安装一个本地的package

修改composer.json文件,添加repositories属性。

{
    "repositories": [
        {
            "type": "path",
            "url": "../../packages/my-package"
        }
    ]
}

修改完后我们就可以在本地执行composer require,composer会从本地文件中做个软连接到vendor目录下。
用这种方式可以非常方便的测试的你的package

Author: gangbo