在我当前的TypeScript项目中,我有以下文件结构:
project
├─app
│ └─index.html
├─test
└─src
├─app
│ ├─tsconfig.json
│ └─app.ts
├─lib
│ └─lib.ts
└─test
├─tsconfig.json
└─test.ts
我想要实现的是,在为app
和test
编译此项目时,生成的文件结构如下所示:
project
├─app
│ ├─index.html
│ └─app.js
├─test
│ ├─lib
│ │ └─lib.js
│ └─test.js
└─src
└─...
或者这个:
project
├─app
│ ├─index.html
│ └─app.js
├─test
│ ├─lib.js
│ └─test.js
└─src
└─...
我有一个位于lib目录中的库。它由app.ts使用,然后在网页上使用。测试位于测试目录中。我真正得到的是:
project
├─app
│ ├─index.html
│ └─app.js
├─test
│ ├─lib
│ │ └─lib.js
│ └─test
│ └─test.js
└─src
└─...
注意额外的test
- 目录。
src/test/tsconfig.json
- 文件如下所示:
{
"compileOnSave": true,
"compilerOptions": {
"target": "es2016",
"lib": [
"dom",
"es2016"
],
"outDir": "../../test",
"noImplicitAny": true,
"noImplicitThis": true,
"noImplicitReturns": true,
"module": "commonjs"
},
"files": [
"test.ts"
]
}
由于我想使用node.js在我的机器上执行这些测试,我不得不选择commonjs
作为模块系统。这不会合并所有TypeScript模块,如amd
- 模块系统。据我所知,tsc
搜索所有相关模块的第一个公共父目录,并将其作为输出的基本目录。该公共目录将是src
,这就是输出目录中存在额外级别目录的原因。
所以我的问题是:
如何告诉TypeScript编译器使用src/test
作为输出的根目录,以便将test.js
放入test/test.js
而不放入test/test/test.js
?
设置"rootDir": "./"
不起作用,因为编译器将输出错误:
error TS6059: File '[...]/lib/lib.ts' is not under 'rootDir' '[...]/src/test/'. 'rootDir' is expected to contain all source files.