javascript – 使用uglifyjs对嵌套的类和变量进行管理

我使用uglifyjs来缩小连接的文件集,这种方法很好但不够好.构建的lib使用名称空间,因此类,函数和常量存储在根名称空间变量中:

(function() {
  var root = { api:{}, core:{}, names:{} };

  /* util.js file */
  root.names.SOME_LONG_NAMED_CONST='Angel';

  /* Person.js file */
  root.core.Person = function(name) { this.name = name };

  /* API.js with the functions we want to expose */
  root.api.perform = function(param_for_api) { /* do something */ }

  window.lib_name.perform = root.api.perform;

})();

这被缩小为不那么小的版本

(function(){var a={api:{},core:{},names:{}};a.names.SOME_LONG_NAMED_CONST="Angel",a.core.Person=function(a){this.name=a},a.api.perform=function(){},window.lib_name.perform=a.api.perform})();

我理解uglify可能认为root var是一个必须按原样保存并且不能更改的数据结构.有没有办法让uglify破坏根命名空间中的嵌套名称?

最佳答案
当您最小化Javascript时,您只能更改变量的名称,api,核心和名称不是变量,而是对象的属性.如果最小化器改变了这些,您可能会得到意想不到的结果.如果在你的代码中你会打电话怎么办?

root["api"].perform = function()...

甚至是类似的东西

function doIt(section, method, argument) {
    root[section][method](argument);
}
doIt('api','perform', 101);

所有完全合法的JS,但最小化器永远无法弄清楚发生了什么.

转载注明原文:javascript – 使用uglifyjs对嵌套的类和变量进行管理 - 代码日志