介绍一下如何通过Composer和Packagist向PHP社区贡献代码包。首先,如果你是一个PHP开发者但是还不知道什么是Composer,请先参考了一下这篇文章http://docs.phpcomposer.com/00-intro.html,因为访问海外镜像源的速度较慢,也许你还需要这些方法https://pkg.phpcomposer.com/ 来获取更多基础信息。
创建项目
新建一个文件作为我们的项目目录,你可以把所有的文件都放在根目录下,但是我特别推荐新建另一个文件夹 “src” 以更容易理解和维护你的代码结构。项目结构如下:
project 项目根目录
└──src 源代码放在这个目录
└──Hello.php 新建一个php文件,取名 Hello.php
- Hello.php 文件内容如下:
<?php
namespace hello;
class Hello
{
public static function world()
{
return 'Hello World!';
}
}
使用Composer
Composer是PHP的一个包依赖管理工具。你可以使用第三方库也可以自行开发。
现在我要告诉你如何创建一个Composer包并且发送到Packagist,
Composer通常以“vendor/package” (厂商/包名)的方式来命名
现在要在项目的根目录里创建一个 composer.json
的文件,我们可以手动创建,也可以在根目录里通过composer init
命令来根据提示创建,根目录下就生成了composer.json文件,目录结构如下:
project 项目根目录
└──src
└──Hello.php
└──composer.json
- 添加自动加载
然后我们可以手动编辑生成的composer.json文件,添加php的版本要求和自动加载(使用PSR-4),使用hello命名空间,加载src目录下的所有文件,composer.json文件内容如下:
{
"name": "wumiss/hello",
"description": "echo hello world",
"license": "MIT License",
"authors": [
{
"name": "wumiss",
"email": "wumiss@wumiss.com"
}
],
"minimum-stability": "dev",
"require": {},
"autoload": {
"psr-4": {
"hello\\": "src/"
}
}
}
- 执行安装
在根目录打开命令行输入composer install
最后或多生成composer.lock 和vendor文件夹
在根目录下创建一个测试文件取名 test.php,代码如下:
<?php
require_once __DIR__ . '/vendor/autoload.php';
use hello\Hello;
echo SayHello::world();
- 在项目根目录下执行命令
php test.php
如果终端打印出“Hello World!”那祝贺你测试通过!
发布Packagist
上面我们在本地完成了编写和测试。那么想让更多人使用我们的包就需要把我们新建的包发送到Packagist.org。首先我们可以先将项目发布到Github。我们先去Github 创建一个公有仓库命名“hello”, 我们在项目根目录使用Git命令来完成发布。
我们先在根目录里创建.gitignore文件,把vendor目录和composer.lock文件排除git在外。然后推送至github仓库
vendor/*
composer.lock
- 提交到Packagist
- 首先要在Packagist上注册账号并登录
- 点击顶部导航条中的Summit按钮
- 在输入框中输入github上的仓库地址,如:https://github.com/chenjiesuper/ansible-php
- 然后点击Check按钮(Packagist会去检测此仓库地址的代码是否符合Composer的Package包的要求)
- 检测正常的话,会出现Submit按钮,再点击一下Submit按钮,我们的包就提交到Packagist上了
- 以后更新代码可以先从Packagist获取token然后去github 配置下对应的GitHub Service Hook实现代码提交后Packagist自动拉取更新
如何使用
我们就可以在其他项目引用这个包了,方法如下:
在新建的项目根目录执行命令 composer require wumiss/hello
或者在新建项目根目录新建composer.json编辑:
{
"require": {
"wumiss/hello":"dev-master" //这里的版本根据实际需要修改
}
}
然后执行 composer install 即可。