Как предотвратить компиляцию import'ов?
Мне нужно скомпилировать .test.ts файлы, но при этом основной проект я уже собрал и при каждом изменении тестов мне его пересобирать не нужно. Я попытался сделать это таким образом:
tsconfig.test.json
{
"extends": "./tsconfig.dev.json", // компилирует всё, кроме .test.ts
"include": ["src/**/*.test.ts"], // используем тот же конфиг, но только для .test.ts
"exclude": [], //
...
}
Но несмотря на то, что я указал в конфиге, что компилировать я желаю только .test.ts файлы, оно компилирует в том числе и import'ы. Как сделать так, чтобы tsc мне верил "на слово", что импортируемые скрипты уже скомпилированы?
src/a.ts
// какой-то библиотечный код
src/a.test.ts
import {
// ...
} from './a' // импорт, из-за которого a.ts повторно компилируется
// какой-то тестирующий код
До компиляции (я уже компилировал с tsconfig.dev.json, с tsconfig.test.json - ещё нет):
projroot
├─...
├─tsconfig.dev.json
├─tsconfig.test.json
├─src/
│ ├─a.test.ts
│ └─a.ts
└─dist/
└─a.js // результат компиляции tsconfig.dev.json
После компиляции (с текущим tsconfig.test.json):
projroot
├─...
├─tsconfig.dev.json
├─tsconfig.test.json
├─src/
│ ├─a.test.ts
│ └─a.ts
└─dist/
├─a.test.js // результат компиляции tsconfig.test.json
└─a.js // tsconfig.test.json также задевает и этот файл, т.к. он импортируется в
// a.test.ts, заставляя его повторно компилироваться, хотя его нет в include
После компиляции (с изменённым tsconfig.test.json):
projroot
├─...
├─tsconfig.dev.json
├─tsconfig.test.json
├─src/
│ ├─a.test.ts
│ └─a.ts
└─dist/
├─a.test.js // результат компиляции tsconfig.test.json
└─a.js // результат компиляции tsconfig.dev.json
Ответы (1 шт):
Опция noResolve выполняет поставленную задачу, однако выбрасывает море исключений из-за того, что импорт не найден, хотя всё до этого уже было скомпилировано. Спрашивается, зачем тогда такая опция?
Единственное решение, что я нашёл, это использовать watch-mode через опцию компиляции "watch": true. Добавив дополнительно опцию "listEmittedFiles": true можно проследить, что оно действительно компилирует только изменённые файлы, но оно производит компиляцию не когда я закончил изменение, а когда файл сохраняется, а т.к. я использую VS Code с авто-сохранением, то оно будет нагружать мою машину постоянно без необходимой надобности.
Конечно, второе решение лучше, чем первое, но всё же, так сложно было привязать компилируемые файлы хотя бы к Git'у? Чтобы оно проверяло, какие исходные файлы были изменены и на основе этой информации производить компиляцию. Или же использовать банальную хэш-сумму? Ладно, этим вопросам всё равно суждено быть затерянными в бесконечном потоке issues на их исходной репке...