SWC编译后箭头函数被转成普通函数,怎么保留ES6语法?
我用SWC替换了Babel做构建,但发现原本的箭头函数全被转成了普通function,导致this指向出问题。项目目标环境是现代浏览器,根本不需要降级啊。
配置里已经设了jsc.target为es2020,但还是不行。是不是哪里漏了?比如这段代码:
const handleClick = () => {
console.log(this.value);
};
document.addEventListener('click', handleClick);
编译后变成function声明,this就绑错上下文了,急!
首先检查你的 swcrc 文件里有没有设置 minify 选项,默认情况下 SWC 可能会对代码进行压缩优化,这会导致某些语法结构被改变。试着明确禁用 minify:
另外,如果还在使用 transform 选项,记得把不必要的转换都去掉。比如有个插件可能会强制转成普通函数。确认下 transform 里有没有类似以下配置:
最后再运行编译,应该就能保留箭头函数了。其实调试这个真挺头疼的,有时候一个小配置就影响全局。记得测试完编译结果,看看 this 绑定是不是正常了。