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

Vercel部署Next.js应用时Middleware报错:__dirname未定义

解决Vercel部署Next.js时出现的ReferenceError: __dirname is not defined问题

问题详情

部署到Vercel后出现运行时错误,堆栈指向Next.js内部依赖的ua-parser-js组件,本地开发环境无此问题,且自身代码未主动使用__dirname变量:

ReferenceError: __dirname is not defined
    at (node_modules/next/dist/compiled/ua-parser-js/ua-parser.js:1:17315)
    at (node_modules/next/dist/compiled/ua-parser-js/ua-parser.js:1:17444)
    at (node_modules/next/dist/server/web/spec-extension/user-agent.js:27:59)
    at (node_modules/next/server.js:8:0)
    at (src/middleware.js:37:29)
    at (middleware:middleware.js:1:17)

可用解决方案

  • 升级Next.js到最新稳定版本
    该问题大概率是Next.js内部编译的ua-parser-js依赖在ESM环境下的兼容Bug,官方后续版本已修复类似内部变量报错。执行以下命令升级:

    npm install next@latest
    # 或 yarn upgrade next@latest
    # 或 pnpm update next@latest
    
  • 清理matcher中的重复规则
    你的config.matcher里重复定义了"/dashboard/:path*",虽不是直接触发错误的原因,但冗余规则可能导致middleware执行逻辑异常,建议删除重复项:

    export const config = {
      matcher: [
        "/signin",
        "/signup",
        "/",
        "/dashboard/:path*",
        "/onboarding/:path*",
        "/settings/:path*",
        "/chat/:path*",
        "/notes/:path*",
        "/chatbot/:path*",
        "/notifications/:path*",
        "/meeting/:path*",
        "/stripe/:path*",
      ],
    };
    
  • 临时切换Node.js运行模式
    若升级版本后问题仍存在,可在项目根目录创建.npmrc文件,添加以下内容强制Node.js使用CommonJS模式:

    type=commonjs
    

    注意:此方案可能影响其他ESM相关配置,仅作为临时修复尝试。

  • 调整Vercel部署的Node.js版本
    登录Vercel控制台,进入项目Settings > General > Node.js Version,尝试切换到16.x版本(部分旧版Next.js在Node.js 18+的ESM默认模式下可能出现兼容问题)。

内容的提问来源于stack exchange,提问作者Pankaj Gurbani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:46:11