Функция TypeScript «Компилировать при сохранении» не работает в Visual Studio 2015


85

Функция «Компилировать при сохранении» у меня не работает после обновления до Visual Studio 2015. Когда я вношу изменение в .tsфайл в своем проекте и сохраняю его, в строке состояния в нижней части среды IDE отображается сообщение Output(s) generated successfully, но сгенерированный .jsфайл не работает. не меняю.

Вот что я пробовал:

  • добавив следующее в корневой <Project>элемент в my .csproj:

    <PropertyGroup>
        <TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled>
    </PropertyGroup>
    
  • установка и снятие отметки с параметра «Автоматически компилировать файлы TypeScript, не являющиеся частью проекта» в Tools -> Options -> TypeScript -> Project:

    введите описание изображения здесь

  • двойная проверка, чтобы убедиться, что в свойствах сборки TypeScript моего проекта установлен флажок «Компилировать при сохранении»:

    введите описание изображения здесь

Что мне не хватает?

В качестве примечания: этап компиляции TypeScript работает должным образом при запуске обычной сборки.


Убедитесь, что файлы JS НЕ обновляются. Некоторое время у меня возникла проблема с VS2013, когда предварительный просмотр JS не обновлялся, но файлы JS действительно обновлялись. Откройте его вручную, чтобы проверить, обновился ли код. Причина этого была неизвестна, но решение заключалось в том, чтобы закрыть VS и снова открыть его. Я еще не пробовал создавать файлы TS в VS2015.
Джейсон Х,

1
Они сломали его для РТМ. См. Этот вопрос stackoverflow.com/questions/31559653/…
Simon_Weaver

1
Я работаю, когда вы запускаете visual studio от имени администратора!
alisabzevari 03

@alisabzevari Спасибо за предложение, но запуск от имени администратора не решает для меня эту проблему.
Натан Френд,

Ответы:


139

Для меня это был такой вариант в tsconfig.json:

"compileOnSave": true,
"compilerOptions": { ... },

Перезапустите Visual Studio, чтобы это изменение вступило в силу.


Используя angular2, среди прочего обновил мой машинописный текст для rc1, и, естественно, все сломалось, пока я в конце концов не обнаружил, что это была моя проблема. Не нуждался в этом, пока не обновился до 1.8.10.
Джеймс

5
да, добавьте параметр в tsconfig.json и перезагрузите проект, если проект размещен в решении VS. Тогда ts будет скомпилирован в js при сохранении.
ZZZ

1
Добавление "watch": trueк compilerOptionsработало для меня в Visual Studio 2015 с обновлением 2 с Typescript 1.8.29.0
Вахид Амири,

1
В какой-то момент примерно во времена TypeScript 2 Visual Studio перешла от сохранения этих настроек в .csprojфайле к использованию только tsconfig.json. Если страница свойств вашего проекта TypeScript не отключена, это, вероятно, означает, что у вас установлена ​​старая версия инструментов TypeScript для Visual Studio, и вам следует установить microsoft.com/en-us/download/details.aspx?id=48593
cchamberlain

32

Сегодня я наткнулся на эту проблему: я исправил ее с помощью новой "watch":trueопции компилятора, которая также доступна через JSON в самых последних версиях TypeScript:

{
  "compilerOptions": {
    "watch": true
  }
}

После этого мне пришлось решить еще одну проблему, связанную со следующей ошибкой, которая появилась в окне вывода:

Object doesn't support property or method 'watchFile'

Оказалось, что моя система использовала устаревшую версию TypeScript (1.0.x), несмотря на то, что я был уверен, что у меня есть более новая версия , поставляемая с Visual Studio 2015 Update 1 (1.7). Если вы столкнетесь с этой проблемой, вы можете легко проверить свою версию tsc, набрав tsc -vв командной строке.

Если он говорит 1.0.xили что-то <1,7, вероятно, это связано с тем, что у вас есть старые ссылки в переменной среды PATH. Убедитесь, что у вас установлена ​​версия 1.7 или более поздняя, ​​проверив папку Microsoft SDKs, которая используется Visual Studio для установки пакетов TypeScript по мере их обновления:

C:\Program Files (x86)\Microsoft SDKs\TypeScript

Если нет, обновите соответствующим образом. Откройте CPanel > System > Advanced > Environment Variables , выберите System Variables и нажмите Edit ; просмотрите список в поисках любой ссылки на папку TypeScript, измените одну из них, чтобы она указывала на вашу последнюю установленную версию TypeScript ( 1.7или выше), и удалите любые другие дублированные файлы. См. Также снимок экрана ниже:

введите описание изображения здесь

Для получения дополнительной информации прочтите этот пост в моем блоге.


1
Для меня на win10 имя в списке было «Путь», а не системные переменные. Когда вы выбираете это (его значение представляет собой длинную строку, соединенную точкой с запятой), а затем нажимаете кнопку редактирования, вы получаете модальное окно, показанное в этом ответе. Мое решение заключалось в том, чтобы НЕ добавлять compileroptions> watch> true, а установить compileOnSave> true (на один шаг выше compileroptions)
BobbyTables

1
Для меня установка этой опции вызвала ошибку сборки JsErrorScriptException (0x30001). После поиска я столкнулся с этой проблемой github.com/Microsoft/TypeScript/issues/7362 . Решение Милоша Вежбицкого (установка compileOnSave) у меня работает, но только после перезапуска VS.
fikkatra

У меня такая же проблема. U и @zedd сэкономили мне много часов. Этот пост тоже полезен: ryadel.com/en/… .
Дуди

8

Решение:

Для меня, и я совершенно уверен, что это так и для других, это произошло из-за ошибки в tsconfig.json.

Вам нужно добавить compileOnSave: true. Но в глобальном разделе не внутри compilerOptions.

Wrong:
{
  "compilerOptions": {
    "noImplicitAny": false,
    "noEmitOnError": true,
    "removeComments": false,
    "sourceMap": true,
    "target": "es5",
    "compileOnSave": true

  },
  "exclude": [
    "node_modules",
    "wwwroot"
  ]
}

Correct:
{
  "compilerOptions": {
    "noImplicitAny": false,
    "noEmitOnError": true,
    "removeComments": false,
    "sourceMap": true,
    "target": "es5"

  },
"compileOnSave": true,
  "exclude": [
    "node_modules",
    "wwwroot"
  ]
}

С уважением,

Андерс Оба в Basechat.



2

В моем случае я установил Visual Studio Community 2015 вместе с VS 2012. Я использовал Web Essentials для машинописного текста в 2012 году, что, похоже, противоречило 2015 году.

При удалении Web Essentials в 2012 году проблема была решена.


Я использую VS Community, и удаление Web Essentials помогло мне. Спасибо и проголосовали за!
Ray

2

В машинописном тексте 2 вам нужно удалить "outDir": из вашего tsconfig. Исправьте ошибку в Visual Studio.


Где outdir tsconfig? Thx
jay

@jay Вы не видите опцию в конфигурационном файле tsconfig.json машинописного текста?
Иван

1

В свойствах проекта -> «TypeScript Build» вы также можете просто снять флажок «Не выдавать выходные данные, если сообщается о каких-либо ошибках». Проверка этого параметра, похоже, деактивирует транспилирование при сохранении, если есть ошибка или нет.


1

У "compileOnSave": true,меня не работало. Я наконец понял, что Visual Studio не "compileOnSave": true,принимает значение, если оно определено в другом .jsonфайле, который вы расширяете. Он должен быть в корне, чтобы он работал.


1

найдите файл, то есть C: \ file.ts в вашем, terminal/cmdи введите

tsc file.ts -w // watches for file changes and converts on save

1

Проверьте, установлена ​​ли у вас версия TypeScript, настроенная в проекте. Почему-то я не получил предупреждения о том, что у меня не установлен TypeScript 3.7, но функция компиляции при сохранении перестала работать тихо.

Как только я установил TypeScript 3.7, он снова заработал.


1

Не уверен, что это кому-нибудь поможет.

Хотя у меня были проблемы с компиляцией, но он компилировался при сохранении. Я просто не включил панель инструментов обозревателя решений, чтобы показать все файлы.

Файл был там и с нетерпением ждал добавления в проект.

введите описание изображения здесь


0

Здесь точно такая же проблема. Я использую обновление 3 для Visual Studio 2015 и TypeScript 2.9.2.0. В инструментах / опциях / проектах и ​​решениях / внешних веб-инструментах я обновил $ (PATH) до второй позиции. При всех этих конфигурациях compileOnSave: true у меня не работает. Обходное решение - открыть командную строку, запустить ng build --watchна стороне и позволить узлу позаботиться об автоматической компиляции.


0

У меня была похожая, но не такая же проблема в Visual Studio 2019

  • Мой проект был настроен на использование TypeScript 2.9
  • У меня был установлен TypeScript 3.8, и код компилировался, но не компилировался при сохранении

Я установил старую версию TypeScript 2.9, перезапустил VS, а затем он ожил.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.