使用UglifyJS+GruntJS进行条件编译

3
我正在使用 grunt-bbb 进行JavaScript项目开发。我想使用grunt对UglifyJS的支持来进行条件编译,但我似乎无法使它工作。我尝试向uglify任务传递一个defines选项,但它似乎没有起作用。
我的 grunt.js 文件如下:
module.exports = function (grunt) {
    grunt.initConfig({

        // ... config options ...

        uglify: {
            "mangle": {
                "defines": {"DEBUG": false}
            }
        },

        // ... more configs ...

    });

    // ... custom tasks ...

    grunt.registerTask("release", "default min mincss");
};

我试图给对象添加一个属性,但这似乎也没有用(它仍然混淆文件...)显然正在运行UglifyJS,但似乎没有传递选项。我已经浏览了代码,当我运行时,我得到:
{ mangle: { defines: { DEBUG: false } } }

我认为这看起来是正确的...

有什么想法吗???


我也尝试了同样的事情,但也没有成功... - Dmitry Pashkevich
虽然其他的混淆选项也可以工作,例如 mangle: {except: ['$']} 将保留美元符号而不对其进行重命名。 - Dmitry Pashkevich
2个回答

4

以下是我目前可行的解决方案:

uglify: {
  options: {
    compress: {
      global_defs: {
        APP_DEBUG: false
      }
    }
  }
}

将它放在压缩选项中可以有效地解决问题,这种情况下会设置APP_DEBUG=false。我从这里获得了解决方法:https://github.com/gruntjs/grunt-contrib-uglify/issues/12

1

我向Grunt提交了一个问题,显然问题在于Uglify内部(处理defines参数的方式与文档相矛盾)。

以下代码有效:

uglify: {
  mangle: {
    defines: {
      DEBUG: ['name', 'true']
    }
  }
}

传递给Uglify进行压缩


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接