将Laravel 7项目升级至Laravel 10时遇致命错误求助
解决Laravel 7升级到Laravel 10的致命错误问题
核心问题原因
你直接跨多个主版本(7→10)升级,且原有依赖包版本与PHP 8.1、Laravel 10不兼容,同时Laravel升级必须按主版本逐步推进,不能跨版本直接执行composer update。
分步升级方案(必须按顺序执行)
Laravel升级需遵循7 → 8 → 9 → 10的顺序,每一步都要确保依赖兼容、代码适配后再推进下一步。
1. 先升级到Laravel 8
修改composer.json的依赖配置如下:
"require": { "php": "^7.3|^8.0", "barryvdh/laravel-dompdf": "^0.9.0", "fideloper/proxy": "^4.4", "fruitcake/laravel-cors": "^2.0", "guzzlehttp/guzzle": "^7.0", "imliam/laravel-env-set-command": "^1.0", "laravel/framework": "^8.0", "laravel/socialite": "^5.0", "laravel/tinker": "^2.5", "maatwebsite/excel": "^3.1.30", "mcamara/laravel-localization": "^1.6", "milon/barcode": "^8.0", "nesbot/carbon": "^2.36", "predis/predis": "^1.1", "pusher/pusher-php-server": "~5.0", "tymon/jwt-auth": "^1.1" }, "require-dev": { "facade/ignition": "^2.5", "fakerphp/faker": "^1.9.1", "laravel/ui": "^3.0", "mockery/mockery": "^1.3.1", "nunomaduro/collision": "^5.0", "phpunit/phpunit": "^9.3" }
- 执行
composer update,解决依赖冲突 - 运行
php artisan migrate处理框架迁移变更 - 清理缓存:
php artisan cache:clear && php artisan config:clear - 检查自定义代码,替换Laravel 7中已废弃的API(比如路由语法、模型工厂写法)
2. 升级到Laravel 9
修改composer.json:
"require": { "php": "^8.0.2", "barryvdh/laravel-dompdf": "^2.0", "fideloper/proxy": "^4.4", "fruitcake/laravel-cors": "^3.0", "guzzlehttp/guzzle": "^7.2", "imliam/laravel-env-set-command": "^1.0", "laravel/framework": "^9.0", "laravel/socialite": "^5.5", "laravel/tinker": "^2.5", "maatwebsite/excel": "^3.1.40", "mcamara/laravel-localization": "^1.7", "milon/barcode": "^9.0", "nesbot/carbon": "^2.36", "predis/predis": "^1.1", "pusher/pusher-php-server": "~6.0", "tymon/jwt-auth": "^2.0" }, "require-dev": { "facade/ignition": "^2.16", "fakerphp/faker": "^1.9.1", "laravel/ui": "^4.0", "mockery/mockery": "^1.5", "nunomaduro/collision": "^6.0", "phpunit/phpunit": "^9.5" }
- 执行
composer update - 运行
php artisan migrate - 清理缓存,检查代码适配Laravel 9的变更(比如目录结构、配置文件调整)
3. 升级到Laravel 10
修改composer.json:
"require": { "php": "^8.1", "barryvdh/laravel-dompdf": "^2.2", "fruitcake/laravel-cors": "^3.0", "guzzlehttp/guzzle": "^7.2", "imliam/laravel-env-set-command": "^1.0", "laravel/framework": "^10.0", "laravel/socialite": "^5.6", "laravel/tinker": "^2.8", "maatwebsite/excel": "^3.1.50", "mcamara/laravel-localization": "^1.8", "milon/barcode": "^10.0", "nesbot/carbon": "^2.66", "predis/predis": "^2.0", "pusher/pusher-php-server": "~7.0", "tymon/jwt-auth": "^2.1" }, "require-dev": { "facade/ignition": "^2.20", "fakerphp/faker": "^1.23", "laravel/ui": "^4.2", "mockery/mockery": "^1.6", "nunomaduro/collision": "^7.0", "phpunit/phpunit": "^10.0" }
- 执行
composer update - 运行
php artisan migrate - 清理缓存
前端依赖适配(Laravel 10用Vite替代Mix)
原有的npm run dev报错是因为Laravel 10弃用了Laravel Mix,改用Vite:
- 移除
package.json中的laravel-mix依赖 - 添加Vite相关依赖:
npm install vite laravel-vite-plugin --save-dev - 修改
package.json的scripts:"scripts": { "dev": "vite", "build": "vite build" } - 在项目根目录创建
vite.config.js:import { defineConfig } from 'vite'; import laravel from 'laravel-vite-plugin'; export default defineConfig({ plugins: [ laravel({ input: ['resources/css/app.css', 'resources/js/app.js'], refresh: true, }), ], }); - 执行
npm install,再运行npm run dev即可正常编译前端资源
解决php artisan key:generate报错
确保以下几点:
- 项目根目录存在
.env文件(可复制.env.example重命名) - 所有Composer依赖已安装完成(无报错)
- 执行
php artisan config:clear清理配置缓存后,再运行php artisan key:generate
内容的提问来源于stack exchange,提问作者ahmad almasri
相关产品推荐
相关产品推荐

