2016-12-20 81 views
3

我在研究grunt-inline模塊,並面臨以下問題。我有以下任務的配置:如果拋出異常,爲什麼GruntJS不會執行?

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

從配置上面uglify: true選項意味着執行UglifyJS.minifythis line

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任務?

回答

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

UPDATE: 那麼,爲什麼開不例外,從UglifyJS.minify(inlineFilePath)。代碼打破gruntjs任務?

看起來像這是一個錯誤本身的問題:JS_Parse_Error 這不是一個正確構造的錯誤,並沒有被grunt抓住。看起來你必須自己抓住它,敷在new Error(),你在上面,直到修復進去做見下面鏈接:

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

+0

感謝您的回答。但是,爲什麼如果我能從'UglifyJS.minify'中發現異常,這不是一團糟?請參閱我的更新後的文章 – Erik

+0

Grunt僅處理連接到grunt對象的異常。grunt對象應該用於與gruntjs進行通信。 http://gruntjs.com/api/grunt – Revive

+0

這有點不真實。正如我在上面的帖子更新中所描述的,如果我自己拋出異常,grunt會打破罰款。 – Erik

相關問題