打字稿在保存时编译为单个文件

par*_*ent 15 typescript

我正在使用TypeScript 0.8.3并试图在保存时进行编译工作.

我的设置有点不同但应该真的有效.请记住,当我构建项目时,它工作正常,而不是保存:

显然,第一件事:工具>选项>文本编辑器> TypeScript>项目>编译保存设置为"自动编译作为项目一部分的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" />
Run Code Online (Sandbox Code Playgroud)

我更改了Microsoft.TypeScript.targets,如下所示:

<Target Name="CompileTypeScript">
   <Message Text="Compiling TypeScript files" />
   <Message Text="Creating response file typescriptcompiler.input" />
   <WriteLinesToFile
      File="typescriptcompiler.input"
      Lines="&quot;C:\MyProject\MyProject.Web\Scripts\_references.ts&quot;" <!-- 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>
Run Code Online (Sandbox Code Playgroud)

然而,我仍然需要重建该项目来生成我的单曲application.js.保存单个文件不起作用.

注意:当我尝试一次编译太多文件时,我不得不更改Microsoft.Typescript.targets来解决tsc使用的WScript库中的缓冲区错误.基本上解决方法是写入文件然后传递给编译器.

任何想法为什么它不会重新编译保存?

在Microsoft.Typescript.targets中有这一行,但它似乎没有做任何我尝试删除这两个条件,所以它始终是真的,并且仍然没有编译保存.这该怎么办?:

<TypeScriptCompileOnSaveEnabled Condition="'$(TypeScriptEnableCompileOnSave)' != 'false' and '$(TypeScriptOutFile)' == ''">true</TypeScriptCompileOnSaveEnabled>
Run Code Online (Sandbox Code Playgroud)

moh*_*azy 6

Compile-On-Save的当前实现不支持指定输出文件名.获得输出文件名后,将禁用该功能.如果你看一下.targets文件,就会有一个传达相同含义的语句.

<TypeScriptCompileOnSaveEnabled Condition="'$(TypeScriptEnableCompileOnSave)' != 'false' and '$(TypeScriptOutFile)' == ''">true</TypeScriptCompileOnSaveEnabled>
Run Code Online (Sandbox Code Playgroud)

这是当前实现中的限制,应在未来版本中解除.我已经记录了一个错误来跟踪这个:http://typescript.codeplex.com/workitem/854


jfo*_*ira 6

您可以解决当前TypeScript IDE集成的限制,强制IDE在保存某些文件或特定文件时调用构建目标.

一步步:

  1. 在Visual Studio/Solution Explorer中,选择一个应该在保存时触发操作的.ts文件;

  2. 单击属性面板(F4);

  3. "自定义工具"属性设置为"**MSBuild:***NameOfYourMSBuildTarget*;

  4. 对于此示例,只要将此文件导入到项目文件中,我们就可以使用文件Microsoft.TypeScript.targets中定义的现有CompileTypeScript目标.

  5. 所以该属性的值将是MSBuild:CompileTypeScript,如下图所示:

在此输入图像描述

在这个例子中,我只在文件_references.ts中定义了这个属性,这是你问题中提到的那个.但您可以在任何您希望的文件中指定自定义工具,由您自己决定.

我建议您避免在多个文件中指定相同的自定义工具,因为这将是多余的并且会减慢您的TypeScript编译过程.

之后,每次保存此文件时,都会触发自定义工具属性中指定的操作.

无论您在Tools/Options/Text Editor/TypeScript中的TypeScript编译器设置如何,此设置都将起作用,并且独立于WebEssentials.

我希望这可以帮助你!

  • 哇.这比我意识到3.14的镜像反射是PIE的时间更让我大吃一惊. (9认同)