如何将Laravel 9项目降级到Laravel 8并解决Sanctum与npm问题?
问题解决方案
一、解决Laravel 8缺失Sanctum导致的运行问题
Laravel 9使用的Sanctum 3.x版本不适配Laravel 8,需要安装对应兼容版本,步骤如下:
- 安装适配的Sanctum版本
执行终端命令:composer require laravel/sanctum:^2.14 - 发布配置与迁移文件
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider" - 执行数据库迁移
php artisan migrate - 配置User模型
在app/Models/User.php中引入Sanctum的Trait,操作和Laravel 9一致:use Laravel\Sanctum\HasApiTokens; class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; // 其他业务代码... } - 验证API中间件配置
确保app/Http/Kernel.php的api中间件组包含Sanctum的状态保持中间件(安装后一般自动添加,未添加则手动补上):protected $middlewareGroups = [ 'api' => [ \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ];
二、解决npm安装报错问题
Laravel 8默认使用Webpack Mix构建前端,和Laravel 9的Vite工具不兼容,按以下步骤排查修复:
- 清理缓存与旧依赖
删除项目根目录的node_modules文件夹、package-lock.json文件,然后运行:npm cache clean --force - 恢复Laravel 8默认的package.json配置
若你从Laravel 9复制了package.json,会导致依赖冲突,替换为如下默认配置:{ "private": true, "scripts": { "dev": "npm run development", "development": "mix", "watch": "mix watch", "watch-poll": "mix watch -- --watch-options-poll=1000", "hot": "mix watch --hot", "prod": "npm run production", "production": "mix --production" }, "devDependencies": { "axios": "^0.21", "laravel-mix": "^6.0.6", "lodash": "^4.17.19", "postcss": "^8.1.14" } } - 检查Node.js版本
Laravel 8推荐使用Node.js 14.x~16.x版本,过高版本(如18+)可能与Webpack Mix不兼容。可通过nvm切换版本:# 已安装nvm的情况下执行 nvm install 16 nvm use 16 - 重新安装依赖
npm install - 恢复Webpack Mix配置文件
若项目存在Laravel 9的vite.config.js,直接删除,新建webpack.mix.js文件并写入默认配置:const mix = require('laravel-mix'); mix.js('resources/js/app.js', 'public/js') .postCss('resources/css/app.css', 'public/css');
额外适配提示
- 若用到Intervention Image,直接在Laravel 8安装即可:
composer require intervention/image:^2.7,版本完全兼容。 - Laravel 8默认使用
fzaninotto/faker,而Laravel 9用fakerphp/faker,为保持操作习惯一致,可替换依赖:composer remove fzaninotto/faker composer require fakerphp/faker:^1.9.1
内容的提问来源于stack exchange,提问作者Arnab
相关产品推荐
相关产品推荐

