Gulp-typcript имеет два разных способа компиляции ваших файлов.Метод по умолчанию компилирует весь проект и выполняет проверку типов.Это реализовано в ProjectCompiler
в lib/compiler.ts
.Другой компилирует каждый файл отдельно и активируется, когда вы устанавливаете isolatedModules: true
.Этот метод реализован в FileCompiler
в lib/compiler.ts
.
FileCompiler нужно только скомпилировать измененные файлы.Неизмененные файлы кэшируются, как описал Ахмеджанов в своем ответе.
Однако большинство пользователей используют ProjectCompiler, поскольку проверка типов, вероятно, является причиной того, что они используют TypeScript.Я думаю, что ваш вопрос касается этого ProjectCompiler.Инкрементная компиляция обрабатывается вызовом ts.createProgram
, который экспортирует API-интерфейс TypeScript.Передав старую программу, API-интерфейс TypeScript будет повторно использовать некоторую информацию из предыдущей компиляции.Вы можете найти исходный код здесь:
https://github.com/ivogabe/gulp-typescript/blob/ea22fb7fe4295979e32a9d07b007e3f7473be8b5/lib/compiler.ts#L80
Этого было достаточно для получения пошаговой компиляции, но это изменилось в более новых версиях TypeScript.Нам нужно будет перейти на новый API, возможно, с использованием одного из упомянутых вами API, но я не знаком с ними.
В своем вопросе вы упомянули FileCache.Это используется для хранения всех файлов, которые передаются во входном потоке.API gulp предоставляет все файлы в потоке, тогда как API TypeScript является синхронным.Таким образом, нам нужно подождать, пока у нас будут все входные файлы.Кроме того, мы используем FileCache в FileCompiler, чтобы определить, изменился ли файл и, следовательно, нужно ли его перекомпилировать.