Typescript скомпилировать в один файл при сохранении

Я использую TypeScript 0.8.3 и пытаюсь получить скомпилировать с сохранением для работы.

У меня есть моя небольшая разница, но она действительно должна работать. Имейте в виду, что он отлично работает, когда я создаю проект, просто не сохраняю:

Очевидно, первое: Инструменты > Параметры > Текстовый редактоp > 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, чтобы обойти ошибку буфера в библиотеке WScript, используемой tsc при попытке скомпилировать слишком много файлов одновременно. В основном обходной путь заключается в том, чтобы записать в файл, а затем передать его компилятору.

Любые идеи, почему он не перекомпилируется при сохранении?

Существует эта строка в Microsoft.Typescript.targets, но, похоже, она ничего не делает, я пытался удалить оба условия, поэтому оно всегда истинно и до сих пор нет компиляции при сохранении. Что это должно делать?

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

Ответы

Ответ 1

Вы можете обойти это текущее ограничение интеграции TypeScript IDE, обеспечивающее выполнение IDE для вызова цели сборки при сохранении некоторых файлов или определенного файла.

Шаг за шагом:

  • В Visual Studio/Solution Explorer выберите файл .ts, который должен активировать действие при сохранении;

  • Щелкните панель свойств (F4);

  • Задайте свойство "Пользовательский инструмент" : "** MSBuild: *** NameOfYourMSBuildTarget *;

  • В этом примере мы можем использовать существующую цель CompileTypeScript, определенную в файле Microsoft.TypeScript.targets, если этот файл импортирован в файл проекта;

  • Таким образом, значение свойства будет MSBuild: CompileTypeScript, как вы можете видеть на изображении ниже:

enter image description here

В этом примере я определил это свойство только в файле _references.ts, который указан в вашем вопросе. Но вы можете указать настраиваемый инструмент в любом файле, который вы хотите, зависит от вас.

Я просто предлагаю вам избегать указания одного и того же настраиваемого инструмента в нескольких файлах, поскольку это будет лишним и замедлит процесс компиляции TypeScript.

После этого каждый раз, когда вы сохраняете этот файл, действие, указанное в свойстве Custom Tool, будет запущено.

Эта настройка будет работать независимо от ваших параметров компилятора TypeScript в Инструменты/Параметры/Текстовый редактор /TypeScript, а также не зависит от WebEssentials.

Надеюсь, это поможет вам!

Ответ 2

Текущая реализация Compile-On-Save не поддерживает указание имени выходного файла. после того, как у вас есть имя выходного файла, эта функция отключена. если вы посмотрите на файл .targets, есть утверждение, которое передает то же значение.

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

Это ограничение в текущей реализации и должно быть отменено в будущих версиях. Я зарегистрировал ошибку, чтобы отслеживать это: http://typescript.codeplex.com/workitem/854