2

私は grunt-contrib-uglify のうなり声構成を持っています:

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));

単調なタスクを実行した後、圧縮は空白などを取り除くという点で機能しますが、コードにはまだ名前が付いた関数ラベルがあります。たとえば、圧縮ファイルCore.Dom.AddItemではa.Dom.AddItem. 名前をどこにあるのか、どこにあるのかをマングルする方法はありa.b.cますb=Domc=AddItem? 私も試してみmangle: trueましたが、関数の名前を保持しています。私が間違ったことをした人はいますか?

4

1 に答える 1

3

これを別のファイルに入れることを想像してみてください:

window.Core.Dom.AddItem()

uglify が で名前を変更Core.Domした場合a.b、他のファイルは失敗しwindow.Core.Domますwindow.Core.b

Ugliify は、名前を変更しても安全な名前に変更します。

Core名前を変更する理由aは、このコンテキストではCore、関数の外部での使用を心配することなく、関数内のすべての出現箇所の名前を安全に変更できるためです。

また、クロージャの概念も参照してください。

于 2015-03-14T20:31:19.567 に答える