【问题标题】:Typescript compile to single file on save打字稿在保存时编译为单个文件
【发布时间】:2013-05-21 08:44:59
【问题描述】:

我正在使用 TypeScript 0.8.3 并试图让 compile on save 工作。

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

显然第一件事:工具>选项>文本编辑器>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" />

我将 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>

但我仍然需要重建项目以生成我的单曲application.js。保存单个文件不起作用。

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

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

Microsoft.Typescript.targets 中有这一行,但它似乎没有做任何事情我尝试删除这两个条件,所以它总是正确的,保存时仍然没有编译。这应该做什么? :

<TypeScriptCompileOnSaveEnabled Condition="'$(TypeScriptEnableCompileOnSave)' != 'false' and '$(TypeScriptOutFile)' == ''">true</TypeScriptCompileOnSaveEnabled>

【问题讨论】:

    标签: typescript


    【解决方案1】:

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

    一步一步:

    1. 在 Visual Studio/解决方案资源管理器中选择一个 .ts 文件,该文件应在保存时触发操作;

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

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

    4. 对于这个例子,我们可以使用现有的 CompileTypeScript 目标,定义在文件 Microsoft.TypeScript.targets 中,只要这个文件被导入到项目文件;

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

    在此示例中,我仅在文件 _references.ts 中定义了此属性,即您的问题中提到的那个。但是您可以在任何您希望的文件中指定自定义工具,这取决于您。

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

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

    无论您在工具/选项/文本编辑器/TypeScript 中的 TypeScript 编译器设置如何,此设置都将起作用,并且独立于 WebEssentials。

    希望对你有帮助!

    【讨论】:

    • 哇。这比我意识到 3.14 的镜像反射是 PIE 时更让我震惊。
    • 对于它的价值,当我尝试类似的东西时,我无法让它工作。在这里查看我的问题:stackoverflow.com/questions/18645185/…。接受任何建议。
    【解决方案2】:

    Compile-On-Save 的当前实现不支持指定输出文件名。一旦有了输出文件名,该功能就会被禁用。如果您查看 .targets 文件,则有一个表达相同含义的语句。

    <TypeScriptCompileOnSaveEnabled Condition="'$(TypeScriptEnableCompileOnSave)' != 'false' and '$(TypeScriptOutFile)' == ''">true</TypeScriptCompileOnSaveEnabled>
    

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

    【讨论】:

    • 您能想到任何潜在的解决方法吗?每次重建这么大的项目已经很烦人了,现在才第 3 天。谢谢
    • 该功能旨在与一对一的文件生成模型一起使用。此时最好的选择是将编译分成 1-1 个文件。
    猜你喜欢
    • 2016-04-01
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    相关资源
    最近更新 更多