You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Laravel 9项目降级到Laravel 8并解决Sanctum与npm问题?

问题解决方案

一、解决Laravel 8缺失Sanctum导致的运行问题

Laravel 9使用的Sanctum 3.x版本不适配Laravel 8,需要安装对应兼容版本,步骤如下:

  1. 安装适配的Sanctum版本
    执行终端命令:
    composer require laravel/sanctum:^2.14
    
  2. 发布配置与迁移文件
    php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
    
  3. 执行数据库迁移
    php artisan migrate
    
  4. 配置User模型
    在app/Models/User.php中引入Sanctum的Trait,操作和Laravel 9一致:
    use Laravel\Sanctum\HasApiTokens;
    
    class User extends Authenticatable
    {
        use HasApiTokens, HasFactory, Notifiable;
        // 其他业务代码...
    }
    
  5. 验证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工具不兼容,按以下步骤排查修复:

  1. 清理缓存与旧依赖
    删除项目根目录的node_modules文件夹、package-lock.json文件,然后运行:
    npm cache clean --force
    
  2. 恢复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"
        }
    }
    
  3. 检查Node.js版本
    Laravel 8推荐使用Node.js 14.x~16.x版本,过高版本(如18+)可能与Webpack Mix不兼容。可通过nvm切换版本:
    # 已安装nvm的情况下执行
    nvm install 16
    nvm use 16
    
  4. 重新安装依赖
    npm install
    
  5. 恢复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 17:40:38