Локальные переменные в моей анонимной функции верхнего уровня больше не становятся короче (UglifyJS2)

Я использую сайт JSCompress (который использует UglifyJS2) для сжатия моих JavaScript-кодов. Но похоже, что он больше не сокращает имя моих переменных в анонимной функции верхнего уровня. Это происходит только с конкретным кодом, который есть у меня, тогда как для любого другого вида кодов он сжимает имя всех локальных переменных.

Это то, что я хочу:

(function () {
    function aLongNameToBeCompressed () {
    }
    aLongNameToBeCompressed ();
}) ()

от ^ до:

!function(){function a(){}a()}();

Но в этой функции верхнего уровня происходит наоборотcheckES6, featuresи т. д., эти имена не сжаты, но их переменные являются "локальными"):

;(function (root, name, factory) {
  'use strict';

  if (("function" === typeof define) && define.amd)
    define([exports], factory);

  else if (typeof exports === 'object')
    factory(exports);

  else
    factory(root[name] = {});

})(this, 'esx', function (exports) {
  'use strict';

  var features = {
      "arrayComprehensions": "[for(_ of [0])_]"
    , "arrowFunction": "(_=>_)"
    , "class": "(class{})"
    , "const": "const c=true"
    , "defaultParams": "(function(a=false){})"
    , "destructuring": "let {d}={a:true}"
    , "forOf": "for(var b of [])"
    , "generator": "(function*(){})"
    , "getter": "({get a(){}})"
    , "label": "l:0"
    , "let": "let o"
    , "reservedWords": "({catch:true})"
    , "setter": "({set a(v){}})"
    , "spread": "[...[]]"
    , "stringInterpolation": "`$\{0}`"
    , "stringLineBreak": "'\\\n'"
    , "super": "({b(){super.a}})"
    , "yield": "(function*(){yield true})"
  };

  // exports.features = features;

  function evaluate (code) {
    try {
      eval(code);
      return true;
    } catch(e) {
      return false;
    }
  }

  /**
   * Check if a set of features are supported.
   */
  function supports () {
    var code = "(function(){";
    var i = 0, len = arguments.length;

    for (; i < len; ++i) {
      var feature = arguments[i].toString();

      if (features.hasOwnProperty(feature))
        code += features[feature] + ';';
    }

    code += "})()";
    return evaluate(code);
  }

  exports.supports = supports;

  function checkES7 () {
    return supports("arrayComprehensions");
  }

  function checkES6 () {
    var methods = 'function' === typeof Object.assign &&
                  'function' === typeof Object.freeze;

    var syntax = supports(
                         "arrowFunction"
                       , "class"
                       , "const"
                       , "forOf"
                       , "defaultParams"
                       , "destructuring"
                       , "super"
                       , "yield"
                       );

    return methods && syntax;
  }

  function checkES5 () {
    var methods = 'function' === typeof [].filter &&
                  'function' === typeof Function.prototype.bind &&
                  'function' === typeof Object.defineProperty &&
                  'function' === typeof ''.trim &&
                  'object'   === typeof JSON;

    var syntax = supports("reservedWords");
    return methods && syntax;
  }

  function checkES3 () {
    return "function" === typeof [].hasOwnProperty;
  }

  /**
   * Check for ECMAScript version.
   */
  exports.detectVersion = function () {
    return checkES7() ? 7 :
           checkES6() ? 6 :
           checkES5() ? 5 :
           checkES3() ? 3 :
           null;
  };

});

Когда я сжал это, я увидел, что все локальные переменные имели одно и то же имя (за исключением вложенных областей), checkES6 было checkES6, supports было supports, features было featuresкаждая локальная переменная в этой анонимной функции верхнего уровня не имеет сжатия в своем имени.

Я все еще хотел бы сжать эти имена. В чем дело?

0 ответов

Другие вопросы по тегам