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
相关产品推荐
相关产品推荐

