2

我有一个 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.cwhereb=Domc=AddItem? 我也试过mangle: true了,但它保留了函数的名称。有人知道我做错了什么吗?

4

1 回答 1

3

想象一下在另一个文件中有这个:

window.Core.Dom.AddItem()

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

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

它重命名Core为的原因a是,在这种情况下,它可以安全地重命名Core函数内部的所有出现,而不必担心它在函数外部的使用。

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

于 2015-03-14T20:31:19.567 回答