为什么Grunt Uglify会保留我的函数名称?

时间:2015-03-14 20:03:06

标签: javascript gruntjs uglifyjs grunt-contrib-uglify

我有一个grunt-contrib-uglify的grunt配置:

options: {
    mangle: {
        topLevel: true
    },
    compressor: {
        sequences: true,
        dead_code: true,
        conditionals: true,
        booleans: true,
        unused: true,
        if_return: true,
        join_vars: true,
        drop_console: true
    },
    dist: {
       cwd: 'public',
       expand: true,
       src: ['**/*.js'],
       dest: 'public'
    }
}

以下是我所拥有的一些示例代码:

(function (Core, $, undefined) {
   Core.Dom = {
      AddItem: function() {
         ... code ...
      }
   };

   ... etc ...

}(window.Core = window.Core || {}, jQuery));

在我运行我的grunt任务之后,压缩工作就像摆脱空白等一样,但代码仍然有函数标签及其名称。例如,在压缩文件中Core.Dom.AddItem将是a.Dom.AddItem。有没有办法将名称变为a.b.c b=Domc=AddItem的位置?我也尝试了mangle: true,但它保留了函数的名称。任何人都知道我做错了什么?

1 个答案:

答案 0 :(得分:3)

想象一下在另一个文件中

window.Core.Dom.AddItem()

如果uglify在Core.Dom中重命名为a.b,则其他文件将失败,因为window.Core.Dom现在是window.Core.b

Uglify重命名重命名的安全内容。

Core重命名为a的原因是,在此上下文中,它可以安全地重命名函数内所有出现的Core,而无需担心其在...之外的使用功能

另外,请参阅闭包的概念。