我将遗留节点/快速代码库转换为TypeScript,并以Microsoft TypeScript starter作为起始参考。
在此参考输出中编译为dist
,但是当启用'allowJS in
tsconfig.json , output is emitted to
dist / src`时 - 为什么会这样?
这是我的tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"noImplicitAny": false,
"moduleResolution": "node",
"sourceMap": true,
"rootDir" : "./",
"outDir": "dist",
"baseUrl": ".",
"allowJs": true,
"paths": {
"*": [
"node_modules/*",
"src/types/*"
]
}
},
"include": [
"src/**/*"
]
}
rootDir
更改为./src
,但它提示错误,说'node_modules / someModule'不在src根目录中。 tsconfig.json
移动到src,但没有生成输出。 AllowJS
输出在/dist
下正确映射,直到allowJS
中的tsconfig.json
标志开启,之后输出显示在/dist/src
答案 0 :(得分:2)
这里发生了两件事:
rootDir
来确定输出的目录结构(请参见this comment from Typescript's bossman)。rootDir
只能编译/发出tsc
中的代码。rootDir
,则默认为./
(相对于tsconfig)... 除非您包括了./
之外的内容,该文件需要由tsc
进行编译/发出,在这种情况下,它会强制rootDir
自动设置为包含所有源的目录。allowJS
设置告诉tsc
将.js
代码视为源代码,并将其也发送给outDir
。我怀疑启用allowJS
时,tsc现在必须向.js
发出src
之外的outDir
代码,因此它会自动移动{{ 1}}向上一级。由于rootDir
现在是src
的子目录,因此将其镜像到rootDir
中。
有关解决方案,请参见this answer,使您outDir
仍然是rootDir,还可以包含其外部的代码。
答案 1 :(得分:0)
听起来您的编译器(TSC)配置文件可能位于您希望转换器开始链接过程的位置。你能尝试将它推到一个水平,让我们知道会发生什么吗?
希望这有帮助。