Как предотвратить компиляцию 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 шт):

Автор решения: return

Опция noResolve выполняет поставленную задачу, однако выбрасывает море исключений из-за того, что импорт не найден, хотя всё до этого уже было скомпилировано. Спрашивается, зачем тогда такая опция?


Единственное решение, что я нашёл, это использовать watch-mode через опцию компиляции "watch": true. Добавив дополнительно опцию "listEmittedFiles": true можно проследить, что оно действительно компилирует только изменённые файлы, но оно производит компиляцию не когда я закончил изменение, а когда файл сохраняется, а т.к. я использую VS Code с авто-сохранением, то оно будет нагружать мою машину постоянно без необходимой надобности.


Конечно, второе решение лучше, чем первое, но всё же, так сложно было привязать компилируемые файлы хотя бы к Git'у? Чтобы оно проверяло, какие исходные файлы были изменены и на основе этой информации производить компиляцию. Или же использовать банальную хэш-сумму? Ладно, этим вопросам всё равно суждено быть затерянными в бесконечном потоке issues на их исходной репке...

→ Ссылка