为何Babel转译后的JavaScript文件结尾带有0 && 0?
聊聊@babel/core转译文件末尾
0 && 0的作用 研究@babel/core的转译产物会发现,几乎每个转译后的.js文件结尾都有一行0 && 0,这行代码的实际作用是防止自动分号插入(ASI)失效引发的语法错误,具体解释如下:
- 当TypeScript代码被转译为JS(不管是用TypeScript自身编译器还是@babel/preset-typescript),文件末尾通常会生成导出相关的表达式语句,比如
exports.default = 转译后的内容。如果后续有代码被拼接到这个文件末尾,或者在某些场景下JS引擎的自动分号插入没生效,前面的导出语句可能会和后续代码被错误解析成同一条语句,直接导致语法报错。 0 && 0是个完全无副作用的表达式:它的计算结果永远是0,不会修改任何变量,也不会影响程序逻辑。把它作为独立语句放在文件末尾,能强制确保前面的导出语句被正确终止,从根源上避免意外的语法拼接问题。
要注意的是,这行代码不是Babel核心生成的,而是TypeScript编译器添加的,@babel/core处理TS代码时会保留这一转译产物。
内容的提问来源于stack exchange,提问作者Evert
相关产品推荐
相关产品推荐

