Next.js 12编译出现regenerator: complex pattern in catch clause报错
错误诱因
该报错为Next.js 12默认绑定的SWC编译器的已知兼容缺陷导致,报错信息中的not implemented: regenerator: complex pattern in catch clause已经明确触发逻辑:SWC的ES2015 regenerator转换模块,未实现catch子句中使用解构等复杂匹配模式的转换逻辑。
当你在pages/auth/index.tsx文件中使用了类似如下写法时,就会触发该编译错误:
try { // 业务逻辑 } catch ({ message }) { // catch子句内直接解构错误对象,属于复杂匹配模式 console.log(message) }
解决方案
- 优先推荐代码侧修改:将catch子句内的解构逻辑移到代码块内部,修改后的写法如下:
修改后重新编译即可直接解决问题,无需改动项目配置,也不会损失SWC的编译速度优势。try { // 业务逻辑 } catch (err) { const { message } = err // 移到内部解构 console.log(message) } - 临时过渡方案:如果暂时不想调整代码,可以在
next.config.js中添加配置禁用SWC,改用Babel编译:
同时需保证项目根目录存在有效的Babel配置文件,该方案会降低编译速度,仅适合临时过渡使用。module.exports = { experimental: { forceSwcTransforms: false } } - 版本升级方案:该缺陷在高版本SWC中已经修复,你可以将Next.js升级到13及以上版本,对应绑定的SWC已支持catch子句的复杂模式匹配,升级后即可兼容原有写法。
内容的提问来源于stack exchange,提问作者Pouriya Babaali
相关产品推荐
相关产品推荐

