我正在将遗留节点/快速代码库转换为TypeScript,遵循Microsoft TypeScript启动器作为起始参考。
在这个参考输出被编译为dist
,但是当在tsconfig.json
中启用allowJS
时,输出被发射到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 根目录中。 - 根据我看到的 GitHub 问题,我尝试将
tsconfig.json
移动到 src,但没有生成输出。
允许 JS
输出在/dist
下正确映射,直到allowJS
标志在tsconfig.json
中打开,之后输出出现在/dist/src
这里有两件事:
- Typescript 依靠
rootDir
来决定输出的目录结构(参见 Typescript 老板的评论)。 - 只有
rootDir
中的代码才能由tsc
编译/发出。 - 如果您没有明确设置
rootDir
,则默认为./
(相对于 tsconfig)...除非您在./
之外包含了一些需要由tsc
编译/发出的内容,在这种情况下,它会强制rootDir
自动设置为包含所有源代码的目录。 allowJS
设置告诉tsc
将.js
代码视为源,并将其发送到outDir
。
我怀疑当你启用allowJS
时,src
之外有.js
代码,tsc 现在必须向outDir
发出,因此它自动rootDir
上移一级。由于src
现在是rootDir
的子目录,这在outDir
中得到了镜像。
请参阅此答案,了解一种解决方案,该解决方案使您能够src
保持 rootDir 并包含来自其外部的代码。
听起来您的编译器 (TSC) 配置文件可能比您希望转译器开始链接过程的位置更高。你能试着把它推低一个级别,让我们知道会发生什么吗?
希望这有帮助。