本頁為套件開發基礎的姊妹頁。以套件開發的基本知識(服務提供者、
composer.json 的結構等)為前提。對 Laravel 主版本更新的因應
因應流程
1
更新 composer.json 的 require
將新版本加入相依範圍。若要繼續支援舊版本,可以 若新版本的因應完成、要終止舊版本支援,則刪除舊有約束。
|| 並列。2
於新版本執行測試
於 local 或 CI 環境使用新的 Laravel 版本執行測試。測試通過即可確認基本相容性。若未通過,需修正被變更的 API 或已刪除的方法。
3
於 GitHub Actions 測試 matrix 中加入新版本
於 CI 的測試 matrix 中加入 Laravel 的新版本,持續確認相容性。詳情請參考測試 matrix 的設定範例。
4
發布新版本因應
包含
composer.json 變更的新版本以 tag 發布。使用者只需 composer update 就能安裝於新的 Laravel 版本上。參考官方套件
若對因應方式有疑問,參考 Laravel 官方套件的composer.json 最為可靠。
這些套件由 Laravel 團隊管理,對新版本的因應最快,illuminate/* 的相依版本寫法也可供參考。
PHP 版本要求的更新
Laravel 的版本升級有時也會提升 PHP 的最低要求。於套件的composer.json 一併更新 PHP 要求。
若希望積極使用新的 PHP 功能
若要使用 PHP 8.3 以後的功能(型別化常數、新的隨機函式等),需判斷是否提升最低要求。提升最低要求在語意化版本上屬於破壞性變更,因此應於主版本升級時進行。舊版本支援的終止策略
長期維持舊版本會增加維護成本。制定明確的支援政策,定期終止舊版本支援,有助於健康的套件營運。終止支援的時機
一般做法是配合 Laravel 的支援期間。Laravel 對各版本提供 18 個月的 bug 修正、2 年的安全性修正支援。若套件也採相同政策,對使用者較易理解。在 README 中明確標示支援政策
為使用者可以正確持有期待值,於README.md 記載支援政策。
維持舊版本的成本
持續支援舊版本會產生下列成本。- bug 修正的雙重處理 — 同一 bug 需在多個 branch 修正
- 分支程式碼增加 — 依版本以條件分支吸收不同實作的複雜性
- 測試 matrix 肥大化 — CI 執行時間變長
- 安全性 patch 的複雜化 — 需安全地 backport 至舊版本
早期因應的好處
若能於 Laravel 發布同時完成因應,使用者可立刻遷移至新版本。這是套件可靠度的重要訊號。以開發版事前驗證
Laravel 不公開 beta/RC,但可透過指定dev-master 或 @dev 安裝開發中的下一版。於主版本發布前確認運作,可實現 Zero-day 因應。
@dev 約束安裝。
minimum-stability 設為 dev,可解析與開發版的相依關係。
第一步只要變更 composer.json 即可
即便在完整相容性確認前,只要更新composer.json 的相依範圍並發布,使用者就能夠安裝套件。
掌握 Release 資訊的方法
以下是及時掌握新版本 Release 資訊的方法。測試 matrix 的設定範例
以下為以 GitHub Actions 自動測試多個 Laravel 與 PHP 版本組合的 workflow 範例。fail-fast: false 的重要性
設定fail-fast: false 後,即便一個組合失敗,其他組合的測試仍會繼續執行。一次 CI 執行即可掌握是哪個版本組合出問題。
測試 matrix 的階段性更新
當新 Laravel 版本發布時,將其加入 matrix。當終止舊版本支援時,將其從 matrix 移除。composer.json 的範例
以下為支援多版本的composer.json 完整範例。
版本升級因應 Checklist
Laravel 新版本發布前
Laravel 新版本發布前
- 以開發版(
dev-master/@dev)進行運作確認 - 以官方升級指南確認破壞性變更
- 於測試環境實作對新版本的因應
- 於測試 matrix 中加入新版本並於 CI 確認
Release 後的初期因應
Release 後的初期因應
- 於
composer.json的illuminate/*要求加入新版本 - 視需要更新 PHP 要求
-
require-dev的orchestra/testbench也更新為對應版本 - 為新版本打 tag 並反映至 Packagist
- 更新 README 的版本相容性表格
終止舊版本支援時
終止舊版本支援時
- 於 CHANGELOG/README 明確標示支援終止
- 從
composer.json刪除舊版本的約束 - 從測試 matrix 移除舊版本
- 整理舊版本用的條件分支程式碼
相關頁面
套件開發基礎
說明以服務提供者為核心的 Laravel 套件開發方式。
使用 Pest 進行進階測試
說明使用 Pest 的 Expectation API 與 dataset 撰寫套件測試的方式。