不能在同一个 Laravel 项目里同时运行9和10版本,必须通过物理隔离的独立应用实例实现多版本共存,各项目需使用兼容的PHP/Composer版本、独立目录、依赖、数据库及配置。

不能在同一个 Laravel 项目里“同时运行”9 和 10 版本。Laravel 是单版本框架,一个应用只能加载一个 laravel/framework 实例,版本冲突会导致自动加载失败、类重复定义或 Class not found 等致命错误。所谓“多版本管理”,实际是指在同一台服务器或开发机上,**并行维护多个独立的 Laravel 应用实例(各用不同版本)**,通过环境隔离实现共存。
准备基础运行环境
一台机器支持多版本 Laravel 的前提是底层 PHP 和 Composer 兼容所有目标版本:
- PHP 至少装到 8.1.0(满足 Laravel 10 要求),同时保持对 Laravel 9 的向下兼容(Laravel 9 支持 PHP 8.0+,但 8.1 更稳妥)
- Composer 推荐升级到 ≥2.2.0(Laravel 10 强制要求),旧版无法解析其依赖约束
- 不推荐用系统全局 PHP —— 建议用 phpenv 或 docker-compose 分开管理不同项目的 PHP 小版本(例如 Laravel 9 项目用 php 8.0,Laravel 10 项目用 php 8.2)
- Web 服务器(Nginx/Apache)按项目配置独立虚拟主机,根目录分别指向各自
public/目录
项目级隔离:目录与依赖完全分开
每个 Laravel 版本必须是物理隔离的项目,不可共享 vendor 或配置:
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
- 为 Laravel 9 项目建独立目录:
/var/www/myapp-v9/,初始化时用composer create-project laravel/laravel:^9.0 - 为 Laravel 10 项目建另一目录:
/var/www/myapp-v10/,初始化时用composer create-project laravel/laravel:^10.0 - 各自运行
composer install,互不影响;vendor/、bootstrap/cache/、storage/全部独立 - 数据库建议也分库(如
myapp_v9和myapp_v10),避免迁移或清缓存时误操作
关键配置与缓存需分项目清理
即使版本不同,共用服务器时容易因缓存残留引发混淆:
- 进入 v9 项目目录执行:
php artisan config:clear && php artisan cache:clear && php artisan view:clear - 进入 v10 项目目录执行同样命令 —— 不能跨目录运行,否则会清掉另一个项目的已编译路由或配置
- 若启用路由缓存(
php artisan route:cache),必须分别执行,且注意 Laravel 10 的路由语法(如控制器必须写成[Controller::class, 'method'])与 v9 不兼容 - 环境文件
.env必须各自维护,尤其APP_URL、DB_DATABASE、CACHE_DRIVER等不能混用
开发与部署中的版本识别技巧
快速区分当前运行的是哪个版本,避免调试错位:
- 在各自项目的
routes/web.php首行加一行调试输出:dump('Running Laravel '.app()->version()); - Nginx 日志中为每个站点配置独立
access_log /var/log/nginx/myapp-v9-access.log;,便于追踪请求归属 - Git 分支命名体现版本,如
main-v9、main-v10,CI/CD 流水线按分支指定 PHP 和 Composer 版本 - 使用
php artisan --version进入对应项目目录后执行,结果精准反映该实例版本










