关闭编译器和奇怪的预编码

时间:2018-06-14 04:17:14

标签: javascript node.js google-closure-compiler

我经常使用在线闭包编译器(https://closure-compiler.appspot.com/home)来缩小我的JS代码。现在我正试图通过“外部工具”将这个过程集成到PhpStorm中,我的结果非常奇怪。一切正常,除了一件事 - 如果我使用设置变量,我会在我之前打印一些奇怪的代码。例如:
原始代码

function a(text) { alert(text); }
$(document).ready(function(){
    let mySet = new Set();
    $("#myButton").click(function(){
       a("CLICKED");
       mySet.clear();
       for(let i=0;i<10;i++) mySet.add(i);
    });
}); 

通过WEB工具缩小

function a(b){alert(b)}$(document).ready(function(){var b=new Set;$("#myButton").click(function(){a("CLICKED");b.clear();for(var c=0;10>c;c++)b.add(c)})});  

通过命令行缩小 java -jar compiler.jar --charset UTF-8 --js closureTest.js --js_output_file closureTest.min.js ): https://pastebin.com/QqGXc6H7

没有设置变量:

原始

function a(text) { alert(text); }
$(document).ready(function(){
    let mySet = [];
    $("#myButton").click(function(){
       a("CLICKED");
       mySet.length = 0;
       for(let i=0;i<10;i++) mySet.push(i);
    });
});

通过WEB工具缩小

function a(b){alert(b)}$(document).ready(function(){var b=[];$("#myButton").click(function(){a("CLICKED");for(var c=b.length=0;10>c;c++)b.push(c)})});

通过命令行缩小

function a(b){alert(b)}$(document).ready(function(){var b=[];$("#myButton").click(function(){a("CLICKED");for(var c=b.length=0;10>c;c++)b.push(c)})});

正如您所看到的,WEB工具编译工作正常,但命令行编译有什么问题?

2 个答案:

答案 0 :(得分:2)

好吧,我找到了解决方案(感谢 shiftweave ) 它需要参数--rewrite_polyfills false才能正常工作。

答案 1 :(得分:0)

默认情况下,编译器将代码从最新支持的语言版本“转换”到EcmaScript5。为了支持此功能,它还包括必要的polyfill。如果您不需要polyfill,则另一种答案中所述的--rewrite_polyfills false是一种解决方案,但是如果您只针对支持以下功能的浏览器,则最好设置--language_out=ECMASCRIPT_2015--language_out=ECMASCRIPT_2017这些后来的语言功能。

您应该设置预期的--language_out,因为将来默认值可能会更改。