在Vercel部署Next.js应用时遭遇RangeError:调用栈超出最大值
解决Next.js在Vercel部署时的RangeError栈溢出问题
错误分析
该错误是micromatch库处理路径匹配正则时触发的递归调用栈溢出,核心诱因通常是Next.js配置中的路径匹配规则不规范,或项目中存在特殊命名的文件/目录。
解决方案
1. 检查并修正next.config.js中的匹配规则
- 排查
webpack配置里的exclude/include数组、experimental.appDir相关路径配置,移除冗余/无限递归的通配符(比如**/**这类重复写法) - 示例修正:
改为:// 错误写法(冗余通配符) module.exports = { webpack: (config) => { config.module.rules.push({ test: /\.svg$/, exclude: ['**/node_modules/**/**'], use: ['@svgr/webpack'], }); return config; }, };// 正确写法(精确匹配) module.exports = { webpack: (config) => { config.module.rules.push({ test: /\.svg$/, exclude: /node_modules/, use: ['@svgr/webpack'], }); return config; }, };
2. 重命名项目中的特殊字符文件/目录
- 排查是否存在名称包含
*、?、[]这类micromatch会解析为通配符的文件/目录,直接重命名移除特殊字符即可。
3. 升级Next.js到最新稳定版
- 旧版本Next.js打包依赖的
micromatch可能存在递归bug,执行以下命令升级:npm install next@latest
4. 清理本地缓存后重新构建部署
- 先在本地验证构建正常,再推送代码到Vercel:
本地构建成功后,再推送代码触发Vercel部署。rm -rf .next node_modules package-lock.json npm install npm run build
5. 调整Vercel构建环境配置
- 进入Vercel项目的Settings > Build & Development Settings,尝试切换Node.js版本(比如从16.x切换到18.x)
- 禁用构建缓存选项,强制重新安装依赖后构建。
内容的提问来源于stack exchange,提问作者Ben Jonson
相关产品推荐
相关产品推荐

