提交NextJS+NextAuth时lint-staged报错,是否因Catch All路由括号导致?
NextAuth集成项目lint-staged报错问题解答
问题详情
提交集成NextAuth的NextJS项目时,lint-staged阶段失败,报错信息如下:
Explicitly specified file was ignored due to negative glob patterns: "c:/projects/project01/app/api/auth/[...nextauth]/route.ts"
当前package.json中的lint-staged配置:
"lint-staged": { "**/*": "prettier --write --ignore-unknown" }
问题原因
这个报错确实是由NextJS Catch All路由的括号命名导致的。
lint-staged依赖的glob匹配器会把文件名里的[ ]当作正则表达式的字符集语法来解析,而不是普通的文件名字符。比如[...nextauth]会被glob解析成"匹配包含n、e、x、t、a、u、h这些字符的任意名称",而非精确匹配这个文件夹本身。当lint-staged尝试处理该文件时,glob解析后的规则和实际路径不匹配,再结合可能存在的忽略规则(比如.gitignore或prettier的忽略配置),就会触发这个"文件被忽略"的报错。
解决方法
- 单独指定路径并转义特殊字符:在lint-staged配置里给带方括号的路径添加转义符,确保glob精确匹配该文件:
"lint-staged": { "**/*": "prettier --write --ignore-unknown", "app/api/auth/\\[...nextauth\\]/route.ts": "prettier --write" }
- 升级lint-staged版本:新版本的lint-staged已经优化了对特殊字符文件名的glob处理,升级后可能自动解决该问题。
- 调整匹配规则:避免使用
**/*这种过于宽泛的匹配规则,改用更精确的路径匹配,减少特殊字符解析冲突的概率。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

