我希望停止在TFS源代码控制中包含生成的JavaScript文件,但我还没有设法让编译器在构建上运行。
我已关注this chap's example并编辑了项目文件给我:
<ItemGroup>
<TypeScriptCompile Include="$(ProjectDir)\**\*.ts" />
</ItemGroup>
<Target Name="BeforeBuild">
<Message Text="Before Build" Importance="high" />
<CallTarget Targets="TypeScriptBuild"/>
</Target>
<Target Name="TypeScriptBuild" Inputs="@(TypeScriptCompile)" Outputs="%(Identity).Dummy" Condition="'$(CompileTypeScript)'=='true'">
<Message Text="Building typescript file - @(TypeScriptCompile)" Importance="high" />
<Exec Command=""$(MSBuildProgramFiles32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\tsc" -target ES3 "@(TypeScriptCompile)"" />
</Target>
我已经更改了tsc可执行文件所在的文件位置并删除了TypeScript版本信息,但它没有为我做任何事情。我是这个构建的完全新手,所以会感谢任何帮助,或者如何调试它的提示。
修改1 删除
<ItemGroup>
<TypeScriptCompile Include="$(ProjectDir)\**\*.ts" />
</ItemGroup>
因为它是多余的 - 这是为项目中的每个TypeScript文件单独添加的。
我得到的唯一警告是关于不确定的单元测试。我假设<Message Text="Before Build" Importance="high" />
会产生某种日志消息,但我无法在任何地方看到它。
编辑2 通过放置
使其在Visual Studio 中本地工作<Target Name="BeforeBuild">
<Message Text="Compiling typescript...">
</Message>
<Exec Command=""$(MSBuildProgramFiles32)\Microsoft SDKs\TypeScript\tsc" -target ES3 @(TypeScriptCompile ->'"%(fullpath)"', ' ')" />
在.csproj文件的末尾。出于某种原因,当TFS构建它时,这不起作用。如果我将TypeScript编译器文件位置更改为无意义的抱怨,但是当它正确时,不会生成任何JavaScript文件。
答案 0 :(得分:1)
你真的不应该这样做。在</project>
<Import Project="$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets" />
然后在构建计算机上安装TypeScript。您还需要确保Build Action
文件的.ts
设置为TypeScriptCompile
。此时,TypeScript将编译.ts文件并生成js文件。您不会(也不应该)将.js文件检查到您的代码库中。
您真的希望使用其余代码构建单元测试。更重要的是,您可以在构建时运行这些单元测试,如果其中任何一个测试失败,则使用它们来使构建失败!
结帐this post on msdn和this post on codeplex以帮助您入门。它将涉及使用Chutzpah。此外,请注意,使用Chutzpah时,.js捆绑/交付的方式可能会有所不同,因为Chutzpah必须为您构建该捆绑包,而我不确定您的实际网站是如何进行的。