代码之家  ›  专栏  ›  技术社区  ›  Eric

命令行编译生成的文件比联机版本大

  •  0
  • Eric  · 技术社区  · 6 年前

    我正在命令行上测试google闭包编译器。 我采用了最新版本:

    java -jar closure-compiler.jar --version
    Closure Compiler (http://github.com/google/closure-compiler)
    Version: v20190618
    Built on: 2019-06-21 17:24
    

    我正在生成javascript的压缩版本,如下所示:

    java -jar closure-compiler.jar my_script.js > out.js
    

    https://closure-compiler.appspot.com/home

    我注意到命令行版本在开头添加了以下代码:

    var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,c,b){a instanceof String&&(a=String(a));for(var d=a.length,e=0;e<d;e++){var f=a[e];if(c.call(b,f,e,a))return{i:e,v:f}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
    $jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,c,b){a!=Array.prototype&&a!=Object.prototype&&(a[c]=b.value)};$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);
    $jscomp.polyfill=function(a,c,b,d){if(c){b=$jscomp.global;a=a.split(".");for(d=0;d<a.length-1;d++){var e=a[d];e in b||(b[e]={});b=b[e]}a=a[a.length-1];d=b[a];c=c(d);c!=d&&null!=c&&$jscomp.defineProperty(b,a,{configurable:!0,writable:!0,value:c})}};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,b){return $jscomp.findInternal(this,a,b).v}},"es6","es3");
    

    我的脚本中没有这样的代码:它来自哪里?

    0 回复  |  直到 6 年前
        1
  •  2
  •   Eric    6 年前

    为了让编译器命令行作为web服务工作,我添加了一个选项:

    --language_out=ECMASCRIPT_2015
    
        2
  •  1
  •   Graham P Heath Bergi    6 年前

    这可能是web服务上的设置与您在本地使用的设置不一致。

    看一看 Closure Compiler: Flags and Options

    如果你愿意分享你的信息来源,就有可能帮助你缩小选择范围。

    至于额外的代码,我相信它至少在一定程度上是一个多填充 Array.prototype.find (又名 [].find ),我想 在你的代码里?

    如果是这样的话,那就是注入代码来提高跨浏览器兼容性。