.net - Probleme de compilare Typescript în Appharbor


Încerc să fac ca TypeScript să ruleze pe AppHarbor folosind șablonul de proiect TypeScript HTML5.

Am copiat folderul țintă Typescript din folderul MSBuild și folderul SDK în proiectul meu, local totul funcționează, însă când fac push pe AppHarbor primesc eroarea detaliată mai jos.

De asemenea, mi-am permis să modific ținta TypeScript, schimbând căutarea SDK-ului din folderul Microsoft SDK pentru a căuta în schimb în folderul meu „vendors”.

Versiunea compilatorului TypeScript este 0.9.1.1

Mesajul de eroare pe care îl primesc este următorul:

error MSB6006: "tsc.exe" exited with code 1

Primesc următorul output al sarcinii TypeScript la compilare.

CompileTypeScript:
D:\temp\bn4vn5tf.fls\input\test\..\Vendors\TypeScript\tsc.exe  --removeComments --declaration --module AMD --out ".\js\all.js" --target ES5 "app.ts"

Mai jos puteți vedea eroarea.

CompileTypeScript:
Cannot initialize ActiveScript
D:\temp\bn4vn5tf.fls\input\vendors\TypeScript\Microsoft.TypeScript.targets(72,5): error MSB6006: "tsc.exe" exited with code 1. [D:\temp\bn4vn5tf.fls\input\test\test.csproj]

Am creat un gist public cu întregul rezultat al compilării.

https://gist.github.com/dmportella/6470465

Am creat și un gist pentru ținta TypeScript, astfel încât să poți vedea modificările pe care le-am făcut.

https://gist.github.com/anonymous/6470504

Mulțumesc și anticipat

ACTUALIZARE

Așa cum a sugerat Ryan, am trecut de la tsc.exe la rularea fișierului tsc.js cu nodejs. A trebuit să adaug SDK-ul TypeScript și binarele Nodejs în depozitul meu GIT (ceea ce este oricum o bună practică) și, în final, să adaug sarcina exec necesară în fișierul proiectului TypeScript.

Lista lucrurilor pe care trebuie să le faci.

  1. Adaugă Nodejs în depozitul tău
  2. Adaugă SDK-ul Typescript în depozitul tău
  3. Eliminați importul pentru țintele TypeScript din proiectul dvs.
  4. Adaugă sarcina exec pentru a executa tsc.js folosind nodejs

Vezi mai jos XML-ul MSBuild pe care îl folosesc în proiectul meu.

  <!-- Target ignored as it will not work on appharbor -->
  <!--<Import Project="$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets" />-->
  <Target Name="BuildTypeScript" BeforeTargets="build">
    <Message Importance="high" Text="Running TypeScript Compiler using NodeJs" />
    <Message Importance="high" Text="..\Vendors\nodejs\node.exe ..\Vendors\TypeScript\tsc.js --removeComments --declaration --module AMD --out $(TypeScriptOutFile) --target ES5 @(TypeScriptCompile)"/>
    <Exec Command="..\Vendors\nodejs\node.exe ..\Vendors\TypeScript\tsc.js --removeComments --declaration --module AMD --out $(TypeScriptOutFile) --target ES5 @(TypeScriptCompile)"/>
  </Target>

Răspuns #1

TypeScript 0.9.1.1 necesită instalarea IE10 sau o versiune ulterioară. Dacă acest lucru nu este o opțiune pentru tine, poți rula tsc.js prin node în schimb.

Răspuns #2

Soluția pe care dmportella a inclus-o în răspunsul său a funcționat și pentru mine, totuși ținta MSBuild nu a vrut să funcționeze doar prin copierea și schimbarea căilor.

Iată ținta care a funcționat pentru mine (vă rog să ignorați modificările de cale, aceasta nu este partea importantă):

<Target Name="BuildTypeScript" BeforeTargets="build" Outputs="%(TypeScriptCompile.Identity)">
  <Message Importance="high" Text="Running TypeScript Compiler using NodeJs" />
  <Message Importance="high" Text="..\..\Tools\nodejs\node.exe ..\..\Tools\typescript\sdk\tsc.js --removeComments --declaration --module AMD --target ES5 %(TypeScriptCompile.Identity)"/>
  <Exec Command="..\..\Tools\nodejs\node.exe ..\..\Tools\typescript\sdk\tsc.js --removeComments --declaration --module AMD --target ES5 %(TypeScriptCompile.Identity)"/>
</Target>