如果抛出异常,为什么GruntJS不会中断执行?

时间:2016-12-20 15:37:19

标签: javascript gruntjs inline uglifyjs

我正在探索grunt-inline模块,并面临以下问题。我有以下任务的配置:

grunt.initConfig({
  inline: {
    options: {
       uglify: true
    },
    dist: {
      src: 'src/index.html',
      dest: 'dist/index.html'
    }
  }
});

从上面的配置uglify: true选项意味着在this line上执行UglifyJS.minify

var c = options.uglify ? UglifyJS.minify(inlineFilePath).code : grunt.file.read( inlineFilePath );

问题在于,如果UglifyJS.minify抛出异常(我刚刚面对),grunt inline命令不会失败但会退出。

那么,这个模块的问题是否缺少我身边的一些咕噜声?

如果你能解释我如何在任何例外情况下打破咕噜声执行,那将是很棒的。

修改 我也注意到,如果我抓住异常并自己重新抛出异常,它就会发出咕噜声,如下所示:

try {
    var c = options.uglify ? UglifyJS.minify(inlineFilePath).code : grunt.file.read( inlineFilePath );
} catch(e) {
    throw new Error(e.message);
}

那么为什么来自UglifyJS.minify(inlineFilePath).code的异常会打破gruntjs任务呢?

1 个答案:

答案 0 :(得分:2)

看起来模块有问题。我似乎无法找到标记并返回这些错误的方法。你可以尝试用以下代码替换该行:

var c;
if(options.uglify){
    try{
        c = UglifyJS.minify(inlineFilePath).code
    }catch(err){
        grunt.log.error(err);//catch error and send to grunt
    }
}else{
        c=grunt.file.read( inlineFilePath );
}

<强>更新 那么为什么来自UglifyJS.minify(inlineFilePath)的代码异常.code break gruntjs task?

看起来这是错误本身的问题:JS_Parse_Error 这不是一个正确构造的错误,并没有被grunt捕获。看起来你必须亲自抓住并将其包裹在new Error()中,如上所述,直到修复进入。请参阅下面的链接:

https://github.com/mishoo/UglifyJS2/issues/348