Visual Studio 2015 компилирует ВСЕ файлы typescript при изменении SINGLE файла
Я использую Visual Studio 2015 с Typescript 1.5.4 и Resharper 9
Это сценарий с ошибкой:
- У меня около 180 Typescript файлов
- Я меняю один файл .ts
- VS показывает сообщение "Генерация файла XXX.ts завершена. Остальные файлы все еще компилируются"
- после этого ВСЕ мои файлы .ts скомпилированы в .js
- В этих файлах .js было изменено 2 вещи: форматирование немного отличается и ссылка на .js.map была удалена
- Когда я строю весь проект, файлы .js создаются снова, но с оригинальным форматированием и со ссылкой на .js.map present
Это раздражает, потому что он генерирует слишком много шума в Git
и это мешает мне отлаживать файлы Typescript непосредственно в браузере. (из-за этого отсутствует файл .js.map)
Желаемое поведение, конечно, состоит в том, что только сменный файл .ts должен быть скомпилирован при сохранении. Как это сделать?
Кажется, что R # не имеет к этому никакого отношения, потому что он продолжает происходить с отключенным R #.
Мои текущие настройки проекта:
![введите описание изображения здесь]()
------------- UPDATE -------------
Я пытался обновить до версии Typescript версии 1.6.
Переменная PATH указала на C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.4\
, поэтому я обновил это, чтобы указать на 1.6
Итак, когда я сейчас набираю tsc -v
, он говорит message TS6029: Version 1.6.2
Но по историческим причинам (проект, над которым я работаю, составляет около 2 лет), я должен использовать версию 1.4
внутри VisualStudio. Итак, в .csproj есть <TypeScriptToolsVersion>1.4</TypeScriptToolsVersion>
После этого изменения compile on safe
полностью перестала работать.
Теперь мне нужно восстановить все решение: (
Ответы
Ответ 1
Кажется, что Visual Studio не поддерживает режим просмотра правильно (например, инкрементная компиляция):
Чтобы быть понятным, --watch
работает в Windows, если вы используете node.js/io.js, но программа tsc.exe, распределенная с VS, не поддерживать его; у вас все еще есть Compile on Save для аналогичной функциональности во всяком случае.
https://github.com/Microsoft/TypeScript/issues/2375#issuecomment-100812347
Я не знаю, почему это было закрыто. Поддержка --watch для нашего tsc.exe хост будет возможен и желателен. Прямо сейчас ограничение фактор заключается в том, что наш хост tsc.exe является немного уродливым С++, который использует некоторые древние интерфейсы COM для Chakra, что мы не потратили много усилий на. Наши варианты: [...]
https://github.com/Microsoft/TypeScript/issues/2375#issuecomment-100949019
В качестве обходного пути вы можете запустить
tsc --watch
в папке, где находится tsconfig.json
?
Изменить: https://github.com/Microsoft/TypeScript/issues/5638 - Visual Studio 2015 скомпилирует ВСЕ файлы typescript при изменении SINGLE файла
Начиная с RT 2015 RTM, Compile-on-Save, каждый раз, когда вы сохраняете файл нам необходимо сгенерировать все файлы в проекте, чтобы обеспечить согласованность вывод. У нас есть многочисленные проблемы, связанные с несогласованным выходом при сохранении файлов в разных заказах. Создание всех файлов является единственным мы можем гарантировать правильный и последовательный вывод, учитывая, что все языковые конструкции и то, как они взаимодействуют между файлами (например, пространства имен/внутренние модули могут быть дополнены, что влияет на форма испускаемого кода, также const enms выложены как константы, и т.д..).
Ответ 2
Попробуйте "ECMAScript 5" вместо "ECMAScript 3" в "Версия ECMAScript
Ответ 3
У меня была аналогичная проблема, но поскольку мы самостоятельно обрабатывали компиляцию TS, я вообще хотел избежать автоматической компиляции...
Исправление заключалось в том, чтобы установить флаг TypeScriptCompileOnSaveEnabled
в false
внутри проекта:
<PropertyGroup>
<TypeScriptCompileOnSaveEnabled>false</TypeScriptCompileOnSaveEnabled>
</PropertyGroup>
в моем случае это фактически остановило VS2015 от автоматической компиляции файлов .ts при сохранении, без того, чтобы VS каждый раз попадал в путь и испортил выходы...
Ответ 4
Еще одна работа: вы можете использовать Gulp, чтобы сгенерировать скомпилированные js файлы и карты. С помощью Gulp вы можете также создать задачу просмотра для компиляции при сохранении ts файла. Вы даже можете создать чистые задачи для очистки проекта.
Пример задачи сборки:
var tsProject = ts.createProject(paths.typescriptRoot + 'tsConfig.json'); // use tsconfig.json
gulp.task("tsbuild", function () {
var tsResult = tsProject.src()
.pipe(sourcemaps.init()) // needed to create sourcemaps
.pipe(ts(tsProject)); // use tsconfig.json
return tsResult.js
.pipe(concat(paths.concatTsFileName)) // concat all output files into a sings js files
.pipe(sourcemaps.write()) // write the sourcemap to be able to debug the ts files
.pipe(gulp.dest(paths.typescriptOut)); // output the result on specific path
});
Пример задачи очистки:
gulp.task("clean:tsout", function (cb) {
rimraf(paths.typescriptOut + paths.concatTsFileName, cb); // rimraf is used to delete a folder
});
gulp.task("clean:scriptjs",
function () {
return gulp.src(paths.typescriptJs, { read: false }) // to clean up multiple files we need to use gulp-rimraf
.pipe(gulpRimraf());
});
Пример задачи Watch:
gulp.task("watch:tsbuild", ['tsbuild'], function () {
gulp.watch(paths.typescriptRoot + '**/*.ts', ['tbbuild']);
});