我正在使用TypeScript 0.8.3并尝试让compile on save正常工作。
我的设置有点不同,但应该真的有效。请记住,我在构建项目时工作正常,而不是保存:
显然第一件事:工具>选项>文本编辑器> TypeScript>项目>在Save上编译设置为“自动编译属于项目的TypeScript文件”
然后在我的.csproj文件中
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
<TypeScriptTarget>ES5</TypeScriptTarget>
<TypeScriptSourceMap>true</TypeScriptSourceMap>
<TypeScriptIncludeComments>true</TypeScriptIncludeComments>
<TypeScriptGeneratesDeclarations>false</TypeScriptGeneratesDeclarations>
<TypeScriptModuleKind>AMD</TypeScriptModuleKind>
<TypeScriptOutFile>application.js</TypeScriptOutFile>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<TypeScriptTarget>ES5</TypeScriptTarget>
<TypeScriptSourceMap>false</TypeScriptSourceMap>
<TypeScriptIncludeComments>false</TypeScriptIncludeComments>
<TypeScriptGeneratesDeclarations>false</TypeScriptGeneratesDeclarations>
<TypeScriptModuleKind>AMD</TypeScriptModuleKind>
<TypeScriptOutFile>application.js</TypeScriptOutFile>
</PropertyGroup>
<!-- this imports the code below from Microsoft.Typescript.targets -->
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.targets" />
我更改了Microsoft.TypeScript.targets,如下所示:
<Target Name="CompileTypeScript">
<Message Text="Compiling TypeScript files" />
<Message Text="Creating response file typescriptcompiler.input" />
<WriteLinesToFile
File="typescriptcompiler.input"
Lines=""C:\MyProject\MyProject.Web\Scripts\_references.ts"" <!-- recursively gets individual file paths referenced therein -->
Overwrite="true"
Encoding="Unicode"/>
<Message Text="Executing tsc $(TypeScriptBuildConfigurations) @typescriptcompiler.input" />
<Exec Command="tsc $(TypeScriptBuildConfigurations) @typescriptcompiler.input" />
<Delete Files="typescriptcompiler.input"/>
</Target>
然而,我仍然需要重新启动该项目以生成我的单application.js
。保存单个文件不起作用。
注意:在尝试一次编译太多文件时,我必须更改Microsoft.Typescript.targets以解决tsc使用的WScript库中的缓冲区错误。基本上解决方法是写入文件然后传递给编译器。
为什么它不会在保存时重新编译?
在Microsoft.Typescript.targets中有这一行,但它似乎没有做任何我尝试删除这两个条件所以它始终为真,并且仍然没有编译保存。这该怎么办? :
<TypeScriptCompileOnSaveEnabled Condition="'$(TypeScriptEnableCompileOnSave)' != 'false' and '$(TypeScriptOutFile)' == ''">true</TypeScriptCompileOnSaveEnabled>
答案 0 :(得分:7)
您可以解决TypeScript IDE集成的当前限制,强制IDE在保存某些文件或特定文件时调用构建目标。
一步一步:
在Visual Studio / Solution Explorer中,选择一个应在保存时触发操作的.ts文件;
单击属性面板(F4);
将“自定义工具”属性设置为“** MSBuild:*** NameOfYourMSBuildTarget *;
对于此示例,我们可以使用文件 Microsoft.TypeScript.targets 中定义的现有 CompileTypeScript 目标,只要将此文件导入到项目文件;
因此,该属性的值将为 MSBuild:CompileTypeScript ,如下图所示:
在这个例子中,我只在文件 _references.ts 中定义了这个属性,这是你问题中提到的那个。但您可以在任何您希望的文件中指定自定义工具,由您自己决定。
我建议您避免在多个文件中指定相同的自定义工具,因为这将是多余的并且会降低您的TypeScript编译过程。
之后,每次保存此文件时,都会触发自定义工具属性中指定的操作。
无论您在Tools / Options / Text Editor / TypeScript中的TypeScript编译器设置如何,此设置都将起作用,并且独立于WebEssentials。
我希望这可以帮到你!
答案 1 :(得分:6)
Compile-On-Save的当前实现不支持指定输出文件名。获得输出文件名后,将禁用该功能。如果你看一下.targets文件,就会有一个传达相同含义的语句。
<TypeScriptCompileOnSaveEnabled Condition="'$(TypeScriptEnableCompileOnSave)' != 'false' and '$(TypeScriptOutFile)' == ''">true</TypeScriptCompileOnSaveEnabled>
这是当前实施中的限制,应在未来版本中解除。我已经记录了一个错误来跟踪此问题:http://typescript.codeplex.com/workitem/854