3

我们有一个 MSBuild 脚本,我们用它来编译我们项目中的所有 .ts 文件。首先,我们创建一个包含所有 .ts 文件的属性组;

<ItemGroup>
   <AllTypeScriptFiles Include="XXXXX\Scripts\**\*.ts;" Exclude="XXXX\Scripts\**\*.d.ts;" /> 
</ItemGroup>

然后我们将此文件列表转储到输入文件并运行 tsc.exe;

<WriteLinesToFile
    File="typescriptcompiler.input"
    Lines="@(AllTypeScriptFiles)"
    Overwrite="true"
    Encoding="Unicode"/>    

<Exec Command="&quot;$(MSBuildProgramFiles32)\Microsoft SDKs\TypeScript\$(TypeScriptVersion)\tsc&quot; --target ES5 @typescriptcompiler.input"
      CustomErrorRegularExpression="\.ts\([0-9]+,[0-9]+\):(.*)"
      IgnoreExitCode="true" >
</Exec>

现在,输出表明某些文件无法找到;

Error reading file "XXXXX.ts": File not found

某些文件会发生这种情况,但如果我运行 tsc.exe 并给出与错误消息完全相同的路径,我不会收到任何错误并且文件已编译。

如果我宁愿按顺序编译每个文件:

<Exec Command="&quot;$(MSBuildProgramFiles32)\Microsoft SDKs\TypeScript\$(TypeScriptVersion)\tsc&quot; --target ES5 &quot;%(AllTypeScriptFiles.Identity)&quot;"
      CustomErrorRegularExpression="\.ts\([0-9]+,[0-9]+\):(.*)"
      IgnoreExitCode="true" >
</Exec>

所有文件都编译没有问题,除了它需要 5 分钟而不是 10 秒......

4

2 回答 2

3

Typescript 0.8.3 版解决了这个问题!没有更多的错误。

我现在可以一口气编译所有文件:

<ItemGroup>
   <AllTypeScriptFiles Include="XXXXX\Scripts\**\*.ts;" Exclude="XXXX\Scripts\**\*.d.ts;" /> 
</ItemGroup>

<WriteLinesToFile
    File="typescriptcompiler.input"
    Lines="@(AllTypeScriptFiles)"
    Overwrite="true"
    Encoding="Unicode"/>    

<Exec Command="&quot;$(MSBuildProgramFiles32)\Microsoft SDKs\TypeScript\$(TypeScriptVersion)\tsc&quot; --target ES5 @typescriptcompiler.input"
      CustomErrorRegularExpression="\.ts\([0-9]+,[0-9]+\):(.*)">
</Exec>
于 2013-03-20T15:46:08.400 回答
2

最简单的方法是选择您的顶级文件(例如app.ts)并在编译器上设置一个输出文件......

  <Target Name="BeforeBuild">
    <Exec Command="&quot;$(PROGRAMFILES)\Microsoft SDKs\TypeScript\$(TypeScriptVersion)\tsc&quot; --out final.js --target ES5 @(TypeScriptCompile ->'&quot;%(fullpath)&quot;', ' ')" />
  </Target>

TypeScript 将遍历所有依赖项并将其全部编译到final.js中。

注意 - 我推荐这种方式,因为您没有使用--module标志。commonjs对于或amd程序,我会给出不同的答案。

我刚刚根据 Mark Rendle 的想法更改了我的 TypeScript 工作流程以使用它。

或者,您可以使用以下命令编译所有 .ts 文件...

  <ItemGroup>
    <TypeScriptCompile Include="$(ProjectDir)\**\*.ts" />
  </ItemGroup>
  <Target Name="BeforeBuild">
    <Exec Command="&quot;$(PROGRAMFILES)\Microsoft SDKs\TypeScript\0.8.1.1\tsc&quot; --target ES5 @(TypeScriptCompile ->'&quot;%(fullpath)&quot;', ' ')" />
  </Target>
于 2013-01-18T13:40:18.870 回答