如果抛出异常,为什么 GruntJS 不中断执行?
Why doesn't GruntJS break execution if exception is thrown?
我正在探索 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
命令不会失败,但会完全退出。
所以,这个模块的问题是我这边缺少一些 grunt 的标志吗?
如果你能向我解释如何在任何异常情况下中断 grunt 执行,那就太好了。
编辑:
我还注意到,如果我捕获异常并自己重新抛出它,它会很好地破坏 grunt,如下所示:
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 任务?
模块似乎有问题。我似乎找不到标记和 return 这些错误的方法。您可以尝试将该行替换为:
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 不中断 gruntjs 任务?
看起来这是错误本身的问题:JS_Parse_Error
这不是一个正确构造的错误,不会被 grunt 捕获。看起来你必须自己抓住它并将它包装在 new Error()
中,就像你上面所做的那样,直到修复进入。请参见下面的 link:
我正在探索 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
命令不会失败,但会完全退出。
所以,这个模块的问题是我这边缺少一些 grunt 的标志吗?
如果你能向我解释如何在任何异常情况下中断 grunt 执行,那就太好了。
编辑: 我还注意到,如果我捕获异常并自己重新抛出它,它会很好地破坏 grunt,如下所示:
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 任务?
模块似乎有问题。我似乎找不到标记和 return 这些错误的方法。您可以尝试将该行替换为:
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 不中断 gruntjs 任务?
看起来这是错误本身的问题:JS_Parse_Error
这不是一个正确构造的错误,不会被 grunt 捕获。看起来你必须自己抓住它并将它包装在 new Error()
中,就像你上面所做的那样,直到修复进入。请参见下面的 link: