检测ES2015代码是由babel编译的还是本机运行的

Detect if ES2015 code was transpiled by babel or is running native?

本文关键字:本机 运行 编译 babel ES2015 代码 检测      更新时间:2023-09-26

由于babel操作的某些限制,我需要编写工作区代码,以使我的项目的一部分在被它翻译时正确工作。我想使这段代码有条件,所以它只运行,如果它已经被babel翻译(因为它是不必要的在本地ES6环境)。有什么办法可以做到吗?

From Babel plugins docs:

现在,开箱即用的Babel不做任何事情。它基本上像const babel = code => code;一样解析代码,然后再次生成相同的代码。

所以通常你不能检测代码是否被Babel编译,因为没有任何插件,它是无操作的。但是,你可以通过一些插件或预设来检测代码是否被Babel转换过。

既然你正在谈论编译ES2015代码,我假设你正在使用es2015预设。例如,这个预设编译ES2015类。因为你可以很容易地检测到某些东西是否是ES2015原生类,所以你可以检查代码是否被Babel转换过。

例如,下面的代码片段在现代浏览器中应该输出false:

const isBabel = !(class {}.toString().indexOf('class ') === 0);
console.log(isBabel);

而这一个输出true(我检查了"使用BabelJS/ES2015"选项在代码片段选项):

const isBabel = !(class {}.toString().indexOf('class ') === 0);
console.log(isBabel);