以开发 Laravel 扩展包为例
参考
- Laravel 的扩展插件开发指南
- 如何开发、本地测试、发布 Laravel 扩展包
- 开发自己的composer包
解释
- 此处的 '/' 仅代表项目根目录
进入 laravel 项目根目录,创建 packages 文件夹
在项目根目录创建 packages 文件夹, 并将 packages 文件夹添加到 gitignore
进入 packages 文件夹, 创建包目录并进入
cd packages && mkdir alivms && cd alivms
初始化
生成 composer.json 文件
[develop@localhost ali-vms]$ composer init
Welcome to the Composer config generator
This command will guide you through creating your composer.json config.
Package name (/) [develop/ali-vms]: listen/ali-vms
Description []: ali vms package
Author [zhufengwei , n to skip]: zhufengwei
Minimum Stability []: dev
Package Type (e.g. library, project, metapackage, composer-plugin) []:
License []: MIT
Define your dependencies.
Would you like to define your dev dependencies (require-dev) interactively [yes]? no
{
"name": "listen/ali-vms",
"description": "ali vms package",
"license": "MIT",
"authors": [
{
"name": "zhufengwei",
"email": "[email protected]"
}
],
"minimum-stability": "dev",
"require": {}
}
Do you confirm generation [yes]? yes
指定依赖(如果需要依赖于其它的包)
编辑 composer.json 指定依赖
......
"require": {
"php": ">=5.5.9",
"listen/ali-openapi": "^1.0",
"guzzlehttp/guzzle": "~6.2.3",
"monolog/monolog": "*"
},
......
在 laravel 项目中临时安装依赖(如果所需依赖还未在项目中安装)
注意:是在 laravel 项目中临时安装!
cd /
composer require "listen/ali-openapi" --dev
创建 .gitignore, 过滤不提交的文件
vim /packages/alivms/.gitignore
/vendor
composer.lock
定义命名空间
vim /packages/alivms/composer.json
"autoload": {
"psr-4": {
"Listen\\AliVms\\": "src/"
}
}
在 /packages/alivms 中的 composer.json 中定义的命名空间,在项目根目录执行 composer dump-autoload 是不会加载到 /vendor/autoload.php 的 [验证此问题可以查看 /vendor/autoload.php, 从此文件进入 /vendor/composer/autoload_psr4.php 进行查看]
临时定义 /composer.json 的命名空间
注意路径
cat /composer.json
{
"autoload-dev": {
"psr-4": {
"Listen\\AliVms\\": "packages/alivms/src/"
}
},
}
加载到 /vendor/autoload.php
cd / && composer dump-autoload
在 src 中编写逻辑代码
cd /packages/alivms && mkdir src
src 目录下命令空间都是 Listen\AliVms 开始,以下是示例
1、在 src 目录创建 Alivms Class
namespace Listen\AliVms;
class AliVms
{
......
}
2、在 src 中 Facades 目录添加 Alivms Class
namespace Listen\AliVms\Facades;
class AliVms extends Facade
{
public static function getFacadeAccessor()
{
return 'alivms';
}
}
添加 Facade、serviceProvider 后的操作
编辑项目根目录下的 config/app.php,添加 providers 和 aliases
'providers' => [
......
Listen\AliVms\AliVmsServiceProvider::class,
],
'aliases' => [
......
'AliVms' => Listen\AliVms\Facades\AliVms::class,
]
发布配置
php artisan vendor:publish
发布配置后即可正常加载配置,此时可对扩展包进行完整测试了
发布版本
如果扩展包测试没问题,就可以提交代码并发布版本了
在 github 创建空项目并提交代码
git init
git remote add origin https://github.com/listen-rain/ali-vms.git
git pull origin master
git branch --set-upstream-to=origin/master master
git add .
git commit -m "init"
git push
发布版本
注意 composer.json 中的 version 信息一定要与 tag 保持一致!
修改 composer.json 中的版本信息
"version": "1.0.1"
添加 tag
# git tag -a -m
git tag -a 1.0.1 -m '初始版本 1.0.1'
# git push origin
git push origin 1.0.1
提交到 packagist
参考: 提交 composer 包
1、提交包
submit > check > submit
2、添加 webhook
其中的 payload url 是 https://packagist.org/api/github?username=<用户名>, 在 webhook 添加参考 中可以找到
-
其中的 Secret 在你的用户中心
安装
如果使用国内镜像,需等待同步后再安装
# 更换为国内镜像,此镜像工作日5分钟同步一次,休息日15分钟同步一次
composer config repo.packagist composer https://packagist.laravel-china.org
# 安装
composer require "listen/ali-vms[:^1.0]"