在Grunt上的uglifyjs任务期间有条件地删除DEBUG

时间:2014-06-12 19:08:03

标签: javascript node.js gruntjs uglifyjs grunt-contrib-uglify

我想在构建时删除我的DEBUG语句,我注意到http://lisperator.net/uglifyjs/compress我可以定义global_defs: { DEBUG : false }来删除调试子句中包含的任何内容if (DEBUG) {}

我的uglify任务似乎没有删除任何DEBUG部分,对我做错的任何想法?

我正在使用grunt-contrib-uglify v0.3.3

这是我的 grunt任务: ...

uglify: {
   ...
   simple: {
       options : {
          mangle: false,
          compress: {
            global_defs: {
              DEBUG: false
            },
            dead_code: true
          }
       },
       files: {
          'yayMin.js' : [ ..., somefile.js, ... ]
       }
   },...
...

somefile.js

...
    if (DEBUG) {
       console.log('epic fail - fix your build');
    }
...

2 个答案:

答案 0 :(得分:2)

同时查看grunt-groundskeeper,删除这样写的编译指示:

// <debug>
doSomething();
// </debug>

// <validation>
performSomeValidationOnlyNeededDuringDevelopment();
// </validation>

它还可以选择删除对console.log()debugger;语句的调用。

答案 1 :(得分:1)

grunt-contrib-uglify中似乎存在一个错误,它只从一个文件中删除了global_def。我注意到,如果我将文件缩减到一个文件

,将根据选项的要求删除DEBUG语句

不起作用:

 ...
 files: {
          'yayMin.js' : [ ..., anotherfile.js, somefile.js, anotherfile2.js, ... ]
       }
 ...

曾为:

...
files: {
          'yayMin.js' : [ somefile.js ]
       }
...

最终Grunt任务

uglify: {
'build-minify' : {
        options: {
          mangle: false,
          compress: {
            global_defs: {
              DEBUG: false
            },
            dead_code: true
          },
          wrap: true
        },
        files : {
          'justSayNoToDebug.js' : [
            'ahHaveDebugsInMe.js'
          ]
        }
      },