[关闭]
@gabe 2016-06-03T10:21:16.000000Z 字数 1499 阅读 2786

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

php composer package library


composer介绍

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

写composer.json

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

  1. {
  2. "name": "gangbo/foo",
  3. "description": "test description",
  4. "authors": [
  5. {
  6. "name": "gangbo",
  7. "email": "daigangbo@gmail.com"
  8. }
  9. ],
  10. "autoload": {
  11. "psr-4": {
  12. "gangbo\\foo\\": "src/",
  13. "gangbo\\foo\\test\\": "test/"
  14. }
  15. }
  16. }

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

编写代码并提交到github

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

  1. <?php
  2. namespace gangbo\foo;
  3. class Hello
  4. {
  5. public static function fn()
  6. {
  7. echo 'hello: ' . __METHOD__ . "\n";
  8. }
  9. }

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

  1. <?php
  2. namespace gangbo\foo\test;
  3. class Unit
  4. {
  5. public static function fn()
  6. {
  7. echo 'hello: ' . __METHOD__ . "\n";
  8. }
  9. }

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

  1. git init
  2. git add *
  3. git commit -m "init"
  4. git remote add origin git@github.com:gangbo/foo.git
  5. git pull origin master:master
  6. git push origin master:master

提交到packagist

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

安装使用

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

  1. // test.php
  2. //加载autoload
  3. require __DIR__ . '/vendor/autoload.php';
  4. use gangbo\foo\Hello;
  5. use gangbo\foo\test\Unit;
  6. Hello::fn();
  7. Unit::fn();

执行php test.php 输出结果

  1. hello: gangbo\foo\Hello
  2. hello: gangbo\foo\test\Unit::fn

说明调用成功。

如何安装一个本地的package

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

  1. {
  2. "repositories": [
  3. {
  4. "type": "path",
  5. "url": "../../packages/my-package"
  6. }
  7. ]
  8. }

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

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注