从MSBuild运行Grunt Typescript
我已经建立了一个typescript项目,该项目正在使用GruntJS使用typescript插件构建。我还有一个VisualStudio项目,我希望能够从中调用构建过程 我的第一次尝试是在visual studio中将从MSBuild运行Grunt Typescript,msbuild,gruntjs,msbuild-task,Msbuild,Gruntjs,Msbuild Task,我已经建立了一个typescript项目,该项目正在使用GruntJS使用typescript插件构建。我还有一个VisualStudio项目,我希望能够从中调用构建过程 我的第一次尝试是在visual studio中将任务添加到BeforeBuild目标,任务的配置如下: 但是,当从Grunt输出错误并填充VS中的错误列表时,文件名被错误地列为EXEC,这会很好地运行构建 查看,我看到CustomErrorRegularExpression是该命令的一个参数,但我不太明白如何使用它来解决我的
任务添加到BeforeBuild目标,任务的配置如下:
但是,当从Grunt输出错误并填充VS中的错误列表时,文件名被错误地列为EXEC,这会很好地运行构建
查看,我看到CustomErrorRegularExpression
是该命令的一个参数,但我不太明白如何使用它来解决我的问题
我把它弄得有点乱,并设法将报告的文件名更改为我的.jsproj文件,这也是不正确的。看看我自己的正则表达式:
有没有人有使用这个参数的命令来实现这类事情的经验?我认为部分问题是grunt在两行中打印错误?关于Exec任务只处理单行消息的说法是正确的。此外,它还使用
Regex.IsMatch
来评估错误/警告条件,而不使用模式的捕获组
我无法通过MSBuild找到解决这一问题的方法,但是在grunt任务中直接修改以纠正问题很容易
我正在使用来自的grunt typescript任务:
要使这项工作正常进行,需要进行3项细微的更改
1)替换tasks/typescript.js顶部附近的输出实用程序方法:
/*从输出中删除>>标记和额外间距*/
函数writeError(str){
console.log(str.trim().red);
}
函数writeInfo(str){
console.log(str.trim().cyan);
}
2)替换Compiler.prototype.addDiagnostic
将文件和错误数据写入同一行:
Compiler.prototype.addDiagnostic=函数(诊断){
var diagnosticInfo=diagnostic.info();
如果(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
,并且您的生成输出应该显示错误文本,包括正确的源文件以及行和列信息。Nice!我没有想到修改grunt任务本身。