NextJS Middleware.ts中NextAuth条件匹配器配置报错及方案问询
解决Next.js middleware.ts中matcher字段无法使用条件表达式的问题
你遇到的问题是因为Next.js在构建阶段会静态分析middleware的config配置,不允许在config对象的字段中直接使用条件表达式这类动态语法。可以通过以下两种方式实现需求:
方案一:提前计算matcher变量
先在config外部完成条件判断,把结果赋值给变量后再传入config:
export { default } from "next-auth/middleware" const matcher = process.env.NEXT_PUBLIC_AUTH_USERS === "true" ? ["/folder/(.*)"] : ["/no-match"] export const config = { matcher, }
方案二:使用立即执行函数表达式(IIFE)
用IIFE包裹config的定义,在函数内部完成条件判断并返回配置对象:
export { default } from "next-auth/middleware" export const config = (() => { return { matcher: process.env.NEXT_PUBLIC_AUTH_USERS === "true" ? ["/folder/(.*)"] : ["/no-match"] } })()
这两种方式都能让Next.js的构建工具正确解析到最终的matcher值,避免静态分析报错。
内容的提问来源于stack exchange,提问作者engineer-x
相关产品推荐
相关产品推荐

