Laravel 11 升级需同步更新 laravel/framework 至 "^11.0"、nunomaduro/collision 至 "^8.1"、spatie/laravel-ignition 至 "^2.4"、PHP 约束至 "^8.2",并按需升级 sanctum、passport 等官方包,执行 composer update --with-all-dependencies 后验证版本、清缓存、发布迁移并测试功能。

将 Laravel 项目升级到 11.x 版本时,仅修改 "laravel/framework": "^11.0" 远远不够——配套生态包若未同步更新,Composer 会因版本冲突拒绝安装,或导致运行时 Class not found、Target class does not exist 等致命错误,项目根本无法启动。
必须同步更新的核心生态包
打开项目根目录下的 composer.json 文件,定位到 "require" 区块,逐项核对并修改以下包的版本约束。漏掉任意一项都可能引发依赖解析失败。
方法一:基础必更项(无条件执行)
【nunomaduro/collision 必须升至 ^8.1】:旧版 collision 与 Laravel 11 的异常渲染机制不兼容,不升级会导致 artisan 命令崩溃或白屏。
【spatie/laravel-ignition 必须升至 ^2.4】:这是 Laravel 11 官方指定的调试面板替代方案,旧版 facade/ignition 已彻底废弃且不兼容。
【php 字段必须显式声明为 "^8.2"】:Laravel 11 强制要求 PHP 8.2.0+,若 composer.json 中缺失或写错该行,Composer 可能降级安装旧版框架,最终得到一个“看似成功实则不可用”的环境。
方法二:按需更新的官方第一方包
检查你的 composer.json 是否已安装以下包。若存在,必须同步升级对应版本:
laravel/sanctum → ^4.0
laravel/breeze → ^2.0
laravel/jetstream → ^5.0
laravel/octane → ^2.3
laravel/passport → ^12.0
laravel/scout → ^10.0
laravel/telescope → ^5.0
inertiajs/inertia-laravel → ^1.0
注意:cashier、spark-stripe 等 Stripe 相关包也需升级,但它们的迁移文件不再自动加载——升级后必须手动运行 php artisan vendor:publish --tag=cashier-migrations 等命令导出迁移,否则数据库表缺失。
执行升级命令的关键参数
保存 composer.json 后,终端进入项目根目录,执行以下命令:
composer update --with-all-dependencies
这一步不能省略 --with-all-dependencies 参数。不加它,Composer 只更新顶层包,子依赖(如 illuminate/* 组件)仍被锁在旧版,极易引发 Class not found 错误。
不要用 composer update laravel/framework 单独升级框架——它会忽略你刚改写的其他包约束,导致生态包版本错乱。
升级完成后,立即运行 composer install --no-dev 验证 lock 文件是否稳定。生产环境部署脚本中,永远只用 composer install,绝不可出现 update。
验证升级结果
第一步:运行 php artisan --version,确认输出为 Laravel Framework 11.x.x。
第二步:执行 php artisan config:clear && php artisan cache:clear,清除旧配置缓存。
第三步:启动开发服务器 php artisan serve,访问首页。若页面正常加载且无异常堆栈,则核心升级完成。
第四步:检查 artisan 命令列表 php artisan list,确认 sanctum:install、telescope:install 等新命令已存在——说明对应包服务提供者已正确注册。
第五步:若项目使用了 Sanctum、Passport 或 Telescope,必须运行 php artisan vendor:publish --tag=sanctum-migrations(或其他对应 tag),再执行 php artisan migrate。这一步漏掉会导致认证逻辑失效,且错误不会立刻报出,而是延迟到用户登录时才崩溃。


















