PHP包开发发布完整指南
前期准备
环境要求
- PHP 7.4+(推荐8.0+)
- Composer 2.0+
- Git 账号(GitHub/GitLab)
- Packagist 账号
项目结构规范
my-package/
├── src/ # 源码目录
│ └── MyClass.php
├── tests/ # 测试目录
├── docs/ # 文档
├── examples/ # 使用示例
├── LICENSE # 许可证
├── README.md # 说明文档
├── composer.json # 包配置
└── .gitignore # Git忽略文件
创建composer.json
{
"name": "vendor/package-name",
"description": "包的功能描述",
"type": "library",
"license": "MIT",
"keywords": ["php", "package", "example"],
"require": {
"php": ">=7.4",
"ext-json": "*"
},
"require-dev": {
"phpunit/phpunit": "^9.0"
},
"autoload": {
"psr-4": {
"Vendor\\Package\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Vendor\\Package\\Tests\\": "tests/"
}
},
"authors": [
{
"name": "你的名字",
"email": "your@email.com"
}
],
"minimum-stability": "stable",
"prefer-stable": true,
"scripts": {
"test": "phpunit"
}
}
开发与测试
编写代码
// src/MyClass.php
namespace Vendor\Package;
class MyClass
{
public function hello(): string
{
return "Hello World!";
}
}
编写测试
// tests/MyClassTest.php
use PHPUnit\Framework\TestCase;
use Vendor\Package\MyClass;
class MyClassTest extends TestCase
{
public function testHello()
{
$myClass = new MyClass();
$this->assertEquals("Hello World!", $myClass->hello());
}
}
本地测试
# 安装依赖 composer install # 运行测试 composer test # 检查代码规范(可选) composer require --dev phpstan/phpstan vendor/bin/phpstan analyse src
Git 发布流程
初始化Git仓库
# 在项目目录初始化 git init # 创建主分支 git branch -M main # 添加所有文件 git add . # 创建提交 git commit -m "Initial commit" # 添加远程仓库 git remote add origin https://github.com/yourusername/my-package.git # 推送代码 git push -u origin main
创建版本标签
# 创建标签(语义化版本) git tag v1.0.0 # 或 git tag 1.0.0 # 推送标签 git push origin --tags
发布到 Packagist
注册账号
- 访问 packagist.org
- GitHub账号登录(推荐)或邮箱注册
提交包
网页提交

- 登录后点击 "Submit Package"
- 输入Git仓库URL
- 等待Packagist验证并创建
通过GitHub集成
- 在GitHub中设置 Webhook
- 在Packagist中输入GitHub用户名
- 自动同步更新
设置自动更新(推荐)
在GitHub仓库设置Webhook:
- URL:
https://packagist.org/api/github?username=你的用户名&apiToken=你的令牌 - Content-type: application/json
- 触发事件: Releases(或全部)
版本管理与更新
语义化版本规范
主版本号.次版本号.修订号
- 主版本号:不兼容的API修改
- 次版本号:向下兼容的功能性新增
- 修订号:向下兼容的问题修正
更新发布流程
# 修改代码和版本号 # 更新composer.json中的版本信息 # 提交更改 git add . git commit -m "feat: add new feature" # 创建新标签 git tag v1.1.0 # 推送代码和标签 git push origin main git push origin --tags
最佳实践
文档编写
# Package Name ## 安装 composer require vendor/package-name ## 使用 基本用法和示例代码 ## 文档 链接到docs目录 ## 贡献 如何参与贡献 ## 许可证 MIT License
代码质量
- 遵循PSR-12编码规范
- 编写单元测试(覆盖率>80%)
- 使用PHPStan或Psalm进行静态分析
- 添加PHPDoc注释
发布检查清单
- [ ] composer validate 通过
- [ ] 测试全部通过
- [ ] 代码规范检查通过
- [ ] README完善
- [ ] LICENSE文件存在
- [ ] 正确的版本标签
- [ ] 自动更新配置完成
常见问题解决
包找不到
- 检查Packagist是否批准
- 确认包名拼写正确
- 检查composer.json有效性
自动更新失败
- 检查Webhook配置
- 确认Packagist API Token正确
- GitHub仓库权限设置
版本冲突
- 修改composer.json中的依赖约束
- 使用
composer update更新依赖
进阶技巧
多环境支持
{
"autoload": {
"psr-4": {
"Vendor\\Package\\": "src/"
},
"files": ["src/functions.php"]
}
}
持续集成
# .github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-php@v2
- run: composer install
- run: composer test
代码覆盖率
<!-- phpunit.xml -->
<phpunit bootstrap="vendor/autoload.php">
<testsuites>
<testsuite name="Package">
<directory>tests</directory>
</testsuite>
</testsuites>
<coverage>
<include>
<directory suffix=".php">src</directory>
</include>
</coverage>
</phpunit>
通过以上步骤,你就可以成功发布和管理自己的PHP包了,记住要持续维护、更新文档、及时回应用户反馈,这将有助于建立良好的开源社区形象。