tsc - следить за тем, чтобы файлы не обновлялись, когда outDir присутствует в tsconfig.json

Я пытаюсь написать приложение командной строки nodejs с помощью Typescript, и у меня есть следующий файл tsconfig:

{
"compilerOptions": {
    "module": "commonjs",
    "outDir": "dist"
},
"include": ["src/*.ts"]
}

Когда я использую tsc, все работает как положено (файлы * .js появляются в папке dist).

Однако, когда я запускаю tsc -w, файлы js сначала создаются в папке dist, но не обновляются при изменении любого из файлов ts. Кажется, что Tsc прекрасно видит и компилирует изменения, но не может записать фактические файлы js.

4:23:04 PM - File change detected. Starting incremental compilation...
4:23:04 PM - Compilation complete. Watching for file changes.

Когда я опускаю параметр outDir в tsconfig, все работает (файлы js обновляются при изменении файлов ts). Это нежелательное решение, так как я хочу, чтобы вывод js находился в папке dist, а не в src.

Он также работает правильно, когда я пропускаю использование файла tsconfig.json и запускаю его напрямую:

tsc -w --outDir dist src/app.ts

Я делаю что-то неправильно?

Работает на win10, tsc 2.6.2, node 7.9.0


person Arnelism    schedule 17.12.2017    source источник
comment
Кажется, работает правильно в macOS High Sierra с этими конкретными версиями tsc и node.   -  person tony19    schedule 17.12.2017
comment
Спасибо. Я тестировал его и под Mac, и он действительно работает. Так что это проблема Windows.   -  person Arnelism    schedule 17.12.2017


Ответы (3)


Думаю, я понял это.

Typescript 2.6 поставляется с новой реализацией --watch. При понижении до 2.5.3 все работает нормально.

Так что, похоже, это проблема с новой штукой --watch, которая проявляется в определенных условиях (win10, используя outDir в tsconfig).

Сообщается об этом как об ошибке в системе отслеживания проблем Typescript - https://github.com/Microsoft/TypeScript/issues/20739

person Arnelism    schedule 17.12.2017

Для меня это было исправлено отключением параметра «Использовать« безопасную запись »(сначала сохранить изменения во временный файл)» в WebStorm:

Настройки WebStorm

Когда этот параметр включен, IDE удаляет и переименовывает файлы, что, кажется, сбивает с толку tsc --watch.

(Чтобы увидеть, что он делает, используйте tsc --extendedDiagnostics --listEmittedFiles. Расширенные журналы в выпуске Arnelism на GitHub.)

person Arjan    schedule 07.02.2018

Получите последнюю ночную сборку:

npm install -g typescript@next
person FacePalm    schedule 24.02.2018