我需要编译.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
编译后(使用 current 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
该选项
noResolve
执行任务,但由于找不到导入,尽管之前已经编译了所有内容,但会引发大量异常。问题是,为什么会有这样的选择?我找到的唯一解决方案是通过 compile 选项使用 watch-mode
"watch": true
。通过添加一个附加选项"listEmittedFiles": true
,您可以看到它实际上只编译更改的文件,但它不是在我完成更改时编译,而是在文件保存时编译,因为。我正在使用带有自动保存功能的 VS Code,它会一直不必要地加载我的机器。当然,第二种解决方案比第一种更好,但是,将编译后的文件至少链接到 Git 有那么困难吗?以便它检查哪些源文件已更改并根据此信息进行编译。还是使用平庸的哈希总和?好吧,反正这些问题注定会迷失在原萝卜上层出不穷的问题中……