检测 ES2015 代码是否由 babel 转译或 运行 原生?

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

由于 babel 操作的某些限制,我需要编写变通代码以使我的部分项目在被它转译时正常工作。我想让这段代码有条件,所以它只有在被 babel 转译后才会运行(因为它在原生 ES6 环境中是不必要的)。有什么办法吗?

来自Babel plugins docs

Now, out of the box Babel doesn’t do anything. It basically acts like const babel = code => code; by parsing the code and then generating the same code back out again.

所以通常你无法检测代码是否被 Babel 转译,因为没有任何插件,它是空操作。但是,您也许能够检测到代码是否已通过带有某些插件或预设的 Babel 进行了转译。

既然你在谈论转译 ES2015 代码,我假设你使用的是 es2015 预设。这个预设例如转译 ES2015 类。自 起,您可以检查代码是否已被 Babel 转译。

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

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

虽然这个输出 true(我检查了代码片段选项中的 "Use BabelJS / ES2015" 选项):

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