Package Development
備註
這裡以假設開發紀錄 Log 套件為例
開發流程
Git 版控前置作業(GitHub)
- 會在 GitHub 上先新增一個 repository。
- 在開發用的 Laravel 專案中直接 clone 剛剛新增的 repository 到
packages/ppcsite/record_log
提示
🌟資料夾建議使用 packages/<my-github-username[vendor]>/<package-name>
的結構
Composer 初始化
- Terminal
cd
到剛剛新增的資料夾,透過composer init
初始化。
提示
Terminal 指令:(若無使用版控,直接在 root
創一個資料夾)
mkdir -p packages/<my-github-username>/<package-name>
PS C:\xampp\htdocs\laravel-library> cd ./packages/ppcsite/record_log
# 初始化
PS C:\xampp\htdocs\laravel-library\packages\ppcsite\record_log> composer init
Welcome to the Composer config generator
This command will guide you through creating your composer.json config.
# 輸入套件命名
Package name (<vendor>/<name>) [user/test]: ppcsite/record_log
# 輸入套件描述
Description []: this package used for record log.
# 輸入作者訊息
Author [GavinLin512 <81368692+GavinLin512@users.noreply.github.com>, n to skip]:
# 輸入最低穩定版本,ex: stable, RC, beta, alpha, dev
Minimum Stability []: dev
# 輸入套件類型
Package Type (e.g. library, project, metapackage, composer-plugin) []: library
# 輸入授權類型
License []: MIT
Define your dependencies.
# 是否需要定義依賴套件
Would you like to define your dependencies (require) interactively [yes]? yes
# 以 php 為例
Search for a package: php
Info from https://repo.packagist.org: #StandWithUkraine
# 輸入此依賴套件最低需求版本(或留白取最新版本)
Enter the version constraint to require (or leave blank to use the latest version): >=8.0.2
# 如需多個依賴則重複上述步驟
Search for a package:
......
# 是否需要定義 require-dev
Would you like to define your dev dependencies (require-dev) interactively [yes]? no
# 是否支援 PSR-4 自動載入(對應命名空間名稱與檔案目錄名稱)
Add PSR-4 autoload mapping? Maps namespace "Packages\Test" to the entered relative path. [src/, n to skip]:
{
"name": "ppcsite/record_log",
"description": "this package used for record log",
"type": "library",
"require": {
"php": ">=8.0.2"
},
"license": "MIT",
"autoload": {
"psr-4": {
"Ppcsite\\RecordLog\\": "src/"
}
},
"authors": [
{
"name": "GavinLin512",
"email": "81368692+GavinLin512@users.noreply.github.com"
}
],
"minimum-stability": "dev"
}
# 是否照以上資訊生成 composer.json
Do you confirm generation [yes]?
# 是否要現在安裝依賴套件
Would you like to install dependencies now [yes]? no
PSR-4 autoloading configured. Use "namespace Ppcsite\RecordLog;" in src/
Include the Composer autoloader with: require 'vendor/autoload.php';
2. 初始化完成後會自動生成 src
資料夾及 composer.json
.
├── root
│ ├── packages
│ │ ├── ppcsite
│ │ │ ├── record_log
│ │ │ │ ├── "src"
│ │ │ │ └── "composer.json"
Service Provider 相關
1. 設定 Package Discovery,讓使用者在安裝套件時自動註冊 Service Provider
與 Facade
。
備註
關於 Service Provider
與 Facade
:
🌟透過 Service Provider
啟動 Laravel 應用程式,包括註冊 service container
綁定、EventListener
、Middleware
,甚至 Route
。
🌟Facades
在應用程式的 service container
中為 Class
提供了一個 static
介面,它們提供了一個簡潔而有力的語法來讓你使用 Laravel 的功能。
{
"extra": {
"laravel": {
"providers": [
"Ppcsite\\RecordLog\\RecordLogServiceProvider"
],
"aliases": {
"RecordLog": "Ppcsite\\RecordLog\\RecordLog"
}
}
}
}