Ținte de Compilare TypeScript MSBuild
Am un șablon T4 care generează câteva fișiere .d.ts pe care vreau să le includ în compilarea mea TypeScript. Vreau să înțeleg mai bine când rulează efectiv compilatorul TypeScript ca parte a unui build (sau la salvarea unui fișier .ts) pentru a mă asigura că rulez ținta mea de generare T4 înainte de compilarea TypeScript.
Poate cineva să-mi dea mai multe detalii despre:
- Când rulează de fapt ținta CompileTypeScript?
- Ce face de fapt ținta PreComputeCompileTypeScript?
- Există o metodă sugerată pentru a asigura că un țintă MSBuild rulează înainte de compilarea TypeScript?
(În caz că contează, folosesc VS2013 Update 3.)
Răspuns #1
1. Când rulează efectiv ținta CompileTypeScript?
CompileTypeScript este adăugat la lista CompileDependsOn, această listă este definită aici: "C:\Program Files (x86)\MSBuild\12.0\Bin\Microsoft.Common.CurrentVersion.targets". Ținta implicită (în mod normal build), depinde de CoreBuild, care la rândul său necesită ca ținta Compile să fie executată, vezi ținta compile (linia 2762) și ținta corebuild (linia 703).
Deci, când se construiește ținta, se execută compilarea TypeScript deoarece build necesită ca BeforeBuild, CoreBuild și AfterBuild să ruleze. Ținta CoreBuild necesită multe ținte, inclusiv compile, iar TypeScript s-a adăugat singur în fișierul Microsoft.TypeScript.targets ("C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\TypeScript\Microsoft.TypeScript.targets"). Vezi:
<PropertyGroup>
<CompileDependsOn>
CompileTypeScript;
$(CompileDependsOn);
</CompileDependsOn>
</PropertyGroup>
2. Ce face de fapt ținta PreComputeCompileTypeScript?
Încearcă să găsească calea cea mai comună pentru opțiunea outDir atunci când este folosită. De asemenea, atunci când nu există fișiere TypeScript, această sarcină este cea care dă eroarea: Nu există fișiere de compilat (sau ceva de genul acesta). Când există un singur output (parametrul --out) este specific, face lucruri diferite. Se pare că VS oferă căi complete către compilator și această sarcină le face relative dacă este posibil (deși nu știu motivul pentru aceasta).
3. Există o metodă sugerată pentru a asigura că un țel MSBuild rulează înainte de compilarea TypeScript?
Când creezi propria ta sarcină msbuild, poți modifica ținta compileDependsOn. Ar trebui să faci acest lucru după ce ai importat Microsoft.TypeScript.targets. Poți să o schimbi astfel:
<PropertyGroup>
<CompileDependsOn>
CompileYourTarget;
$(CompileDependsOn);
</CompileDependsOn>
</PropertyGroup>
edit: Am schimbat partea a 2-a a răspunsului
