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=""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, чтобы обойти ошибку буфера в библиотеке 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