@gabe
2016-06-03T18:21:16.000000Z
字数 1499
阅读 2890
php
composer
package
library
关于composer如何安装使用,大家可以到phpcomposer查看文档,这里介绍下如何写个可以使用composer安装的php包
新建一个空目录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和文件目录的对应关系,可以多个。
在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 ,点击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
说明调用成功。
修改composer.json文件,添加repositories属性。
{
"repositories": [
{
"type": "path",
"url": "../../packages/my-package"
}
]
}
修改完后我们就可以在本地执行composer require
,composer会从本地文件中做个软连接到vendor目录下。
用这种方式可以非常方便的测试的你的package