关于 laravel-upgrade
为 Laravel 应用逐个主版本升级提供操作指导,覆盖 9→10、10→11 和 11→12。它从检查版本、对照升级指南到扫描修复和升级后验证,逐步处理兼容性变化。
主要功能
- 01检测当前 Laravel 版本
- 02按版本读取升级指南
- 03扫描并修复破坏性变更
- 04更新依赖版本约束
- 05验证启动状态并运行测试
适用场景
- 01将 Laravel 9 应用升级到 10
- 02检查迁移中的数据库列修改
- 03处理 Laravel 11 的 UUID 行为变化
- 04升级后验证应用和测试套件
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ 1weiho/ laravel-upgrade-skill --skill laravel-upgrade安装后在 Claude Code 中输入/laravel-upgrade确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/from-10-to-11.mdfrom-11-to-12.mdfrom-9-to-10.md详细介绍
Laravel 升级
每次将 Laravel 应用升级一个主版本。支持:9→10、10→11、11→12。
工作流
1. 检测当前版本
读取 composer.json,查找 laravel/framework 版本约束:
// Example: "laravel/framework": "^10.0" means Laravel 10.x
确定目标版本(当前版本 + 1)。如果已经使用 Laravel 12,请告知用户当前使用的是受支持的最新版本。
2. 加载升级指南
根据检测到的版本,读取相应的参考文件:
| 当前版本 | 目标版本 | 参考文件 |
|---|---|---|
| 9.x | 10.x | references/from-9-to-10.md |
| 10.x | 11.x | references/from-10-to-11.md |
| 11.x | 12.x | references/from-11-to-12.md |
3. 扫描并修复
针对指南中的每项破坏性变更,扫描代码库并应用修复:
高影响(始终检查):
composer.json依赖版本- PHP 版本要求
- 使用已弃用方法的数据库迁移
中等影响(检查相关文件):
- 模型
$dates属性 →$casts(9→10) - 使用
(string)强制转换的数据库表达式(9→10) - 缺少属性的列修改迁移(10→11)
HasUuidstrait 行为变更(11→12)
低影响(发现相关模式时检查):
- 已弃用的方法调用(
Bus::dispatchNow、Redirect::home等) - 契约接口变更
- 配置文件更新
4. 更新依赖项
修复代码后,更新 composer.json:
# Update laravel/framework constraint to target version
# Update related packages per upgrade guide
composer update
5. 升级后验证
- 运行
php artisan,确认框架正常启动 - 如果有测试套件,则运行测试
- 检查日志中的弃用警告
常见模式
依赖项更新(所有升级)
搜索 composer.json 中过时的约束,并根据指南更新。
将模型 $dates 改为 $casts(9→10)
// Before
protected $dates = ['deployed_at'];
// After
protected $casts = ['deployed_at' => 'datetime'];
搜索模式:protected \$dates\s*=
数据库表达式强制转换(9→10)
// Before
$string = (string) DB::raw('select 1');
// After
$string = DB::raw('select 1')->getValue(DB::connection()->getQueryGrammar());
列修改(10→11)
现在,使用 ->change() 的迁移必须包含所有修饰符:
// Before (implicit retention)
$table->integer('votes')->nullable()->change();
// After (explicit)
$table->integer('votes')->unsigned()->default(1)->nullable()->change();
HasUuids Trait(11→12)
// Before (ordered UUIDv4)
use Illuminate\Database\Eloquent\Concerns\HasUuids;
// After (if you need UUIDv4 behavior)
use Illuminate\Database\Eloquent\Concerns\HasVersion4Uuids as HasUuids;
评论
支持 Markdown