Laravel 5.5升级至Laravel 10遇依赖问题,求分步升级方案
从Laravel 5.5升级到Laravel 10的分步指南
直接跨版本升级必然会出现依赖冲突和版本不兼容问题,必须按官方推荐的逐步升级路径(5.5 → 5.6 → ... → 8 → 9 → 10)操作,以下是针对你的情况的具体步骤:
第一步:恢复到Laravel 5.5的稳定状态
你当前的composer.json已经错误地将laravel/framework设为10,先回退到5.5版本,确保基础环境正常:
- 修改
composer.json中的laravel/framework为5.5.*,php版本保持>=7.0.0 - 执行命令:
composer update - 确认当前应用能正常运行,没有报错
第二步:按版本逐步升级,重点处理依赖兼容
每个版本升级前,先确认PHP版本符合要求(你的8.1.5满足Laravel 8-10的要求,可优先升级到Laravel 8作为过渡),以下是关键节点的操作:
升级到Laravel 8(核心过渡版本)
Laravel 8兼容你的PHP 8.1.5,先完成这一步的依赖替换,解决mPDF等旧包的兼容问题:
- 修改
composer.json的require和require-dev部分为适配Laravel 8的版本:{ "require": { "php": "^7.3|^8.0", "barryvdh/laravel-dompdf": "^2.0", "gloudemans/shoppingcart": "^4.0", "intervention/image": "^2.7", "laravel/framework": "^8.0", "laravel/tinker": "^2.5", "niklasravnsborg/laravel-pdf": "^5.0", // 此版本支持Laravel 8-10,解决mPDF兼容问题 "shipu/php-aamarpay-payment": "^2.0", // 若该包无适配版本,需寻找替代方案或自行适配 "milon/barcode": "^10.0", "yajra/laravel-datatables": "^10.0" }, "require-dev": { "filp/whoops": "^2.14", "fakerphp/faker": "^1.9", // Laravel 8开始替换原fzaninotto/faker "mockery/mockery": "^1.4", "phpunit/phpunit": "^9.5", "symfony/thanks": "^1.0" }, // 移除fideloper/proxy,Laravel 6+已内置TrustProxies中间件 // 保持autoload、scripts等其他配置不变,classmap可改为psr-4自动加载(可选) } - 执行命令更新依赖:
composer update --with-all-dependencies - 处理升级后的代码适配:
- 参考Laravel 8升级说明,更新
config/app.php、config/auth.php等配置文件 - 调整模型工厂、路由写法(适配Laravel 8的语法规范)
- 运行数据库迁移:
php artisan migrate - 测试应用核心功能,确保无报错
- 参考Laravel 8升级说明,更新
升级到Laravel 9
完成Laravel 8的适配后,升级到9:
- 修改
composer.json中的laravel/framework为^9.0,php版本调整为^8.0 - 更新相关依赖版本:
niklasravnsborg/laravel-pdf升级到^6.0(支持Laravel 9-10)yajra/laravel-datatables升级到^11.0phpunit/phpunit升级到^9.5|^10.0
- 执行
composer update,处理可能的冲突 - 适配Laravel 9的新特性(如字符串函数变化、路由缓存优化等)
升级到Laravel 10
最后升级到目标版本:
- 修改
composer.json中的laravel/framework为^10.0,php版本调整为^8.1(你的版本刚好符合) - 更新依赖:
yajra/laravel-datatables升级到^12.0phpunit/phpunit升级到^10.0
- 执行
composer update - 适配Laravel 10的变化(如移除全局助手函数、模型默认属性变化等)
关键注意事项
- 备份优先:升级前务必备份代码和数据库,避免数据丢失
- 依赖替代:若某些旧包无高版本适配(如
shipu/php-aamarpay-payment),需寻找功能类似的替代包,或自行修改包代码适配当前Laravel版本 - 冲突排查:若升级中出现PHP版本冲突报错,用
composer why命令查看哪个包导致的版本要求冲突:
找到对应包后替换为兼容PHP 8.1的版本composer why php ^7.3
内容的提问来源于stack exchange,提问作者Rakib Hasan
相关产品推荐
相关产品推荐

