這裡記錄如何建立 Laravel 可使用的 packages,以及如何透過私人 git repositroy 來透過 composer 安裝。
首先,建立 Laravel Project 來做示範:
composer create-project --prefer-dist laravel/laravel getter
建立 package 相關資料夾
packages/{vender_name}/{package_name}/src/
例如:
mkdir -p packages/simplexi/greetr/src
前往 package_name file
cd packages/simplexi/greetr/
執行 composer 初始化,以下資訊可以先填寫,或者後續填寫
composer init
Package name (<vendor>/<name>) [adamouyang/greetr]: adamsimplexi/greetr
Description []: A Simple Laravel Package
Author [, n to skip]: Adam OuYang <adamouyang@test.test>
Minimum Stability []: dev
Package Type (e.g. library, project, metapackage, composer-plugin) []: project
License []: MIT
建立好 package 的 composer.json 後,調整資訊
(composer schema 可以參考這裡 https://getcomposer.org/doc/04-schema.md)
{
"name": "adamsimplexi/greetr",
"description": "A Simple Laravel Package",
"type": "project",
"license": "MIT",
"authors": [
{
"name": "Adam OuYang",
"email": "adamouyang@test.test"
}
],
"minimum-stability": "dev",
"autoload":{
"psr-4": {
"Adamsimplexi\\Greetr\\": "src/"
}
},
"require": {}
}
上面設定,表示可以透過 namespace : Adamsimplexi/Greetr
接著,回到專案 root 位置的 composer.json (注意,這裡是專案,而不是 packages 的 composer.json)
CVT2HUGO: 來 autoload 你的package
"autoload": {
"psr-4": {
"App\\": "app/",
"Adamsimplexi\\Greetr\\": "packages/simplexi/greetr/src"
},
"classmap": [
"database/seeds",
"database/factories"
]
},
接著再專案 root 位置執行
composer dump-autoload
接著建立一個檔案
vim packages/simplexi/greetr/src/Greetr.php
內容
<?php
namespace Adamsimplexi\Greetr;
class Greetr
{
public function greet(String $sName)
{
return 'Hi ' . $sName . '! How are you doing today?';
}
}
接著在 route 使用這個 package
vim routes/web.php
內容
use Adamsimplexi\Greetr\Greetr;
Route::get('/greet/{name}', function($sName) {
$oGreetr = new Greetr();
return $oGreetr->greet($sName);
});
啟用 server 並且查看是否成功引入 package
php artisan serve
前往網址
http://127.0.0.1:8000/greet/test
發布 packages 到 github
前往 packages/simplexi/greetr
CVT2HUGO: 初始化 git
git init
git checkout -b master
git add .
git commit -m "initial commit"
git tag 1.0.0
在 github 建立 repository,以及將本地的檔案,包含 tags 推上去 tags 將會作為 composer packages 安裝的版本依據
git remote add origin git@github.com:adon988/greetr.git
git push -u origin --all
git push -u origin --tags
接著,調整 root 位置的 composer.json 這裡引用repositorys 的 type 設定方式
- vps : 如果只有安裝單一 repository
- composer : 如果需要在同一個 gitlab domain 下,安裝多個 repository 時
...
"require": {
"php": "^7.1.3",
"fideloper/proxy": "^4.0",
"laravel/framework": "5.7.*",
"laravel/tinker": "^1.0",
"adamsimplexi/greetr": "^1.0.0"
},
...
"repositories": [
{
"type": "git",
"url": "git@github.com:adon988/greetr.git"
}
]
...
最後,執行更新
//composer clear-cache
composer update
參考: https://medium.com/cafe24-ph-blog/build-your-own-laravel-package-in-10-minutes-using-composer-867e8ef875dd https://laravel.com https://getcomposer.org/doc/04-schema.md https://medium.com/teknomuslim/how-to-build-your-own-laravel-package-chapter-1-9ffc0da9c04d https://pineco.de/laravel-package-development-basics/