为什么Babel 6会进行一些(不必要的)代码转换

dob*_*ler 3 javascript ecmascript-6 babeljs

在这个简单的Babel(6.1.18)示例babel --presets es2015 test.js转换中:

'use strict'; // enable strict mode

(function () {
    const A = 3;
}());
Run Code Online (Sandbox Code Playgroud)

'use strict' // enable strict mode
;
(function () {
    var A = 3;
})();
Run Code Online (Sandbox Code Playgroud)

这主要是出于好奇,但我有兴趣更好地理解为什么: - 第一行中分号的位置已被移到一个单独的行 - 生命的语法已从更改(function () {}());(function () {})();

Fel*_*ing 6

一个抽象语法树的不挽留格式化信息,例如主叫括号是否外部或分组运算符内.实际上,分组运算符((...))甚至没有在AST中表示.

这就是为什么人们正在开发一个具体的语法树实现,它将包含这些信息,然后代码生成器可以使用什么来更接近原始源代码.

如果代码的那部分没有改变(例如重铸),有些工具可以重用原始代码,但是因为Babel主要专注于浏览器的转换代码,所以这可能不太重要.现在,Babel变得更像一个平台,这可能会改变.