2014-01-29 64 views
0

我有一個正在使用typecript插件與GruntJS一起構建的打字稿項目。我也有一個Visual Studio項目,我希望能夠從中調用構建過程。從MSBuild運行Grunt Typescript

我在做這個是添加<Exec>任務,在Visual Studio中BeforeBuild目標的第一次嘗試,與<Exec>任務配置是這樣的:

<Exec Command="grunt --no-color typescript" />

這個運行構建精細,但是,當錯誤是從Grunt輸出的,並且它們在VS中填充錯誤列表,文件名被錯誤地列爲EXEC。

看着Exec Documentation我看到CustomErrorRegularExpression是該命令的一個參數,但我無法完全理解如何使用它來解決我的問題。

我搞砸了一下,並設法將報告的文件名更改爲我的.jsproj文件,這也是不正確的。看着this post我試圖形成自己的正則表達式:

<Exec CustomErrorRegularExpression="\.ts\([0-9]+,[0-9]+\):(.*)" Command="grunt --no-color typescript" IgnoreExitCode="true" />

沒有人有使用這個參數,這個命令來實現這種事情的經驗嗎?我想可能是問題的一部分是咕嚕打印兩行錯誤?

回答

1

您對僅處理單行消息的Exec任務是正確的。此外,它還使用Regex.IsMatch來評估錯誤/警告條件,而不使用模式的捕獲組。

我無法找到通過MSBuild解決此問題的方法,但糾正問題的更改很容易直接在grunt任務中完成。

我正在使用來自:https://www.npmjs.org/package/grunt-typescript的grunt-typingcript任務。

有3個微不足道的變化,使這項工作。

1)更換附近的tasks/typescript.js頂部的輸出實用方法:

/* Remove the >> markers and extra spacing from the output */ 
function writeError(str) { 
    console.log(str.trim().red); 
} 

function writeInfo(str) { 
    console.log(str.trim().cyan); 
} 

2)更換Compiler.prototype.addDiagnostic寫在同一行上的文件和錯誤數據:

Compiler.prototype.addDiagnostic = function (diagnostic) { 
    var diagnosticInfo = diagnostic.info(); 
    if (diagnosticInfo.category === 1) 
    this.hasErrors = true; 

    var message = " "; 
    if (diagnostic.fileName()) { 
    message = diagnostic.fileName() + 
     "(" + (diagnostic.line() + 1) + "," + (diagnostic.character() + 1) + "): "; 
    } 

    this.ioHost.stderr.Write(message + diagnostic.message()); 
}; 

完成這些更改後,您不再需要在Exec任務上設置CustomErrorRegularExpression,並且構建輸出應顯示錯誤文本包括帶有行和列信息的正確源文件。

+0

不錯!我沒有想到修改咕嚕任務本身。 – phosphoer