2014-01-29 3 views
0

typescript 플러그인을 사용하여 GruntJS로 빌드되는 typescript 프로젝트를 설정했습니다. 빌드 프로세스를 호출 할 수있는 Visual Studio 프로젝트도 있습니다.MSBuild에서 Grunt Typescript를 실행하십시오.

과 같이 구성된 <Exec> 작업이 비주얼 스튜디오에서 BeforeBuild 대상에 <Exec> 작업을 추가 한 일에 내 첫 번째 시도 :

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

이 그러나, 빌드 벌금을 실행 오류 그런트에서 출력되고 VS에서 오류 목록을 채우면 파일 이름이 EXEC로 잘못 나열됩니다.

나는 CustomErrorRegularExpression이 명령의 매개 변수 인 것을보고는 있지만, 내 문제를 해결하기 위해 그것을 어떻게 사용 하는지를 이해할 수 없다.

약간 혼란스럽고보고 된 파일 이름을 내 .jsproj 파일로 변경했습니다. 이는 또한 올바르지 않습니다.

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

사람이 이런 종류의 물건을 달성하기 위해이 매개 변수를 사용하여이 명령을 사용하여 어떤 경험이 있습니까 : this post 보면 난 내 자신의 정규식을 형성하는 시도? 문제의 일부는 두 줄의 오류를 인쇄하는 것입니다.

답변

1

단일 작업 메시지 만 처리하는 작업은 정확합니다. 또한 Regex.IsMatch을 사용하여 패턴의 캡처 그룹을 사용하지 않고 오류/경고 상태를 평가합니다.

MSBuild를 통해이 문제를 해결할 수있는 방법을 찾을 수 없었지만 문제를 해결하기위한 변경 사항은 간단한 작업에서 직접 쉽게 할 수있었습니다.

저는 grunt-typescript 작업을 https://www.npmjs.org/package/grunt-typescript에서 사용하고 있습니다.

이 작업을 수행하는 데 필요한 3 가지 간단한 변경 사항이 있습니다.

/* 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()); 
}; 

1) tasks/typescript.js 상단의 출력 유틸리티 메소드 바꾸기

이러한 변경이 이루어지면 Exec 태스크에 CustomErrorRegularExpression을 더 이상 설정할 필요가 없으며 빌드 출력에 오류 텍스트가 표시되어야합니다 행과 열 정보가있는 올바른 소스 파일을 포함하여.

+0

니스! 나는 그 자체로 불평하는 일 자체를 수정하는 것을 생각하지 않았다. – phosphoer