15

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" />

そして、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ます。単一のファイルの保存は機能しません。

注:一度に多くのファイルをコンパイルしようとしたときにtscが使用するWScriptライブラリのバッファーのバグを回避するには、Microsoft.Typescript.targetsを変更する必要がありました。基本的に、回避策はファイルに書き込んでからコンパイラに渡すことです。

保存時に再コンパイルされない理由はありますか?

Microsoft.Typescript.targetsにこの行がありますが、両方の条件を削除しようとしても何も実行されないようです。そのため、常にtrueであり、保存時にコンパイルは行われません。これは何をすることになっていますか?:

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

2 に答える 2

6

Compile-On-Saveの現在の実装では、出力ファイル名を指定することはサポートされていません。出力ファイル名を取得すると、この機能は無効になります。.targetsファイルを見ると、同じ意味を伝えるステートメントがあります。

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

これは現在の実装の制限であり、将来のバージョンで解除する必要があります。私はこれを追跡するためにバグを記録しました:http://typescript.codeplex.com/workitem/854

于 2013-03-29T23:41:49.420 に答える
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にも依存せずに機能します。

これがお役に立てば幸いです。

于 2013-05-21T00:44:59.470 に答える