Next.js 12.3.1根目录middleware.js未生效问题求助
Next.js 12.3.1 Middleware 未生效排查方案
1. 核对文件命名与位置
- 确保文件名是middleware.js(或
.ts,需项目支持TypeScript),且放置在项目根目录;若项目使用src/目录结构,需将文件放在src/根目录下,而非外层项目根目录。 - 避免误放至
pages/、public/等子目录,这些位置不会触发Middleware。
2. 确认版本与依赖一致性
- 执行
npm list next或yarn list next,核对实际安装的Next.js版本是否为12.3.1,避免package.json声明与实际依赖不一致。
3. 用极简代码验证基础功能
替换现有Middleware代码为最简化版本,排除业务逻辑干扰:
export function middleware(request) { console.log('Middleware触发:', request.url); return Response.redirect(new URL('/test', request.url)); } export const config = { matcher: '/:path*', // 匹配所有路径 };
- 重启开发服务器,访问任意路径,观察终端是否打印日志、页面是否跳转到
/test。若仍无反应,说明问题不在代码逻辑,需排查环境或配置。
4. 检查next.config.js配置
- 确认未禁用Middleware:删除
experimental中middleware: false的配置(若存在),确保Middleware功能开启。 - 若配置了i18n,需保证
matcher能覆盖国际化路由:
示例i18n配置下,matcher需包含locale路径:export const config = { matcher: ['/:locale/:path*', '/:path*'], };
5. 排查next-i18next配置冲突
- 暂时注释next-i18next.config.js中的配置内容,重启服务器测试Middleware是否生效。若生效,说明两者存在配置冲突,需逐步恢复配置定位问题点。
6. 清除开发缓存
Next.js开发服务器可能缓存旧代码,执行以下操作后重启:
rm -rf .next npm run dev
- 也可尝试构建生产环境测试(
npm run build && npm run start),生产环境无开发缓存,结果更准确。
7. 检查路由规则冲突
- 测试访问一个不存在的路径(如
/random),确认是否触发Middleware。若存在同名页面路由(如pages/test.js),不影响重定向逻辑,但需确保路径匹配规则正确。
内容的提问来源于stack exchange,提问作者Ajouve
相关产品推荐
相关产品推荐

