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

Next.js中两种导出方式差异:为何middleware的matcher失效?

Next.js 15 Middleware 导出方式导致 Matcher 失效的问题

问题现象

在Next.js 15.0.0-rc.0项目的middleware.ts文件中,两种导出方式表现出不一致的行为:

  • 案例1(正常工作):
export const middleware = (...) => {...} // middleware 正常执行

export const config = {
  matcher: '/about',  // matcher 正常生效
};
  • 案例2(Matcher失效):
const middleware = (...) => {...} // middleware 正常执行

const config = {
  matcher: '/about',  // matcher 完全失效
};

export { middleware, config }

案例1中的matcher能按预期匹配路径,案例2里middleware函数可正常运行,但config中的matcher规则完全不生效。

原因分析

这两种导出方式在标准ES模块语法上是等价的,但Next.js对middleware.ts的编译处理存在特殊逻辑:
Next.js在编译阶段会直接扫描模块中的直接具名导出声明(即案例1的export const config形式),以此提取matcher配置。而对于案例2的批量导出export { config },当前预览版本的编译逻辑未正确识别其中的config对象,导致无法读取并应用matcher规则。

这种差异属于Next.js 15预览版的兼容性bug,并非ES模块本身的行为差异。

临时解决方案

目前可通过以下方式规避该问题:

  • 优先采用案例1的直接具名导出方式定义middleware和config
  • 若需要使用批量导出,可在批量导出前添加一个空的具名导出声明作为编译标记:
const middleware = (...) => {...}
const config = { matcher: '/about' };

// 添加空的具名导出作为编译提示
export const config = config;
export { middleware }

内容的提问来源于stack exchange,提问作者Mohammad Ahmad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:12:36