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']);
});