以開發(fā) Laravel 擴(kuò)展包為例
參考
解釋
- 此處的 '/' 僅代表項(xiàng)目根目錄
進(jìn)入 laravel 項(xiàng)目根目錄,創(chuàng)建 packages 文件夾
在項(xiàng)目根目錄創(chuàng)建 packages 文件夾, 并將 packages 文件夾添加到 gitignore
進(jìn)入 packages 文件夾, 創(chuàng)建包目錄并進(jìn)入
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 (<vendor>/<name>) [develop/ali-vms]: listen/ali-vms
Description []: ali vms package
Author [zhufengwei <zhufengwei@100tal.com>, n to skip]: zhufengwei <zhufengwei@aliyun.com>
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": "zhufengwei@aliyun.com"
}
],
"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 項(xiàng)目中臨時(shí)安裝依賴(如果所需依賴還未在項(xiàng)目中安裝)
注意:是在 laravel 項(xiàng)目中臨時(shí)安裝!
cd /
composer require "listen/ali-openapi" --dev
創(chuàng)建 .gitignore, 過(guò)濾不提交的文件
vim /packages/alivms/.gitignore
/vendor
composer.lock
定義命名空間
vim /packages/alivms/composer.json
"autoload": {
"psr-4": {
"Listen\\AliVms\\": "src/"
}
}
在 /packages/alivms 中的 composer.json 中定義的命名空間,在項(xiàng)目根目錄執(zhí)行 composer dump-autoload 是不會(huì)加載到 /vendor/autoload.php 的 [驗(yàn)證此問(wèn)題可以查看 /vendor/autoload.php, 從此文件進(jìn)入 /vendor/composer/autoload_psr4.php 進(jìn)行查看]
臨時(shí)定義 /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 目錄創(chuàng)建 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 后的操作
編輯項(xiàng)目根目錄下的 config/app.php,添加 providers 和 aliases
'providers' => [
......
Listen\AliVms\AliVmsServiceProvider::class,
],
'aliases' => [
......
'AliVms' => Listen\AliVms\Facades\AliVms::class,
]
發(fā)布配置
php artisan vendor:publish
發(fā)布配置后即可正常加載配置,此時(shí)可對(duì)擴(kuò)展包進(jìn)行完整測(cè)試了
發(fā)布版本
如果擴(kuò)展包測(cè)試沒問(wèn)題,就可以提交代碼并發(fā)布版本了
在 github 創(chuàng)建空項(xiàng)目并提交代碼
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
發(fā)布版本
注意 composer.json 中的 version 信息一定要與 tag 保持一致!
修改 composer.json 中的版本信息
"version": "1.0.1"
添加 tag
# git tag -a <version> -m <version message>
git tag -a 1.0.1 -m '初始版本 1.0.1'
# git push origin <version>
git push origin 1.0.1
提交到 packagist
參考: 提交 composer 包
1、提交包
submit > check > submit

2、添加 webhook

其中的 payload url 是 https://packagist.org/api/github?username=<用戶名>, 在 webhook 添加參考 中可以找到
-
其中的 Secret 在你的用戶中心
image.png
安裝
如果使用國(guó)內(nèi)鏡像,需等待同步后再安裝
# 更換為國(guó)內(nèi)鏡像,此鏡像工作日5分鐘同步一次,休息日15分鐘同步一次
composer config repo.packagist composer https://packagist.laravel-china.org
# 安裝
composer require "listen/ali-vms[:^1.0]"
