我正在按照 Microsoft TypeScript starter 将旧版 Node/express 代码库转换为 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,但没有生成任何输出。
AllowJS
输出在 /dist
下正确映射,直到在 tsconfig.json
中打开 allowJS
标志,之后输出出现在 /dist/src
最佳答案
这里发生了两件事:
- Typescript 依赖
rootDir
来决定输出的目录结构(请参阅 this comment from Typescript's bossman )。 - 只有
rootDir
中的代码可以由tsc
编译/发出。 - 如果您没有显式设置
rootDir
,则默认为./
(相对于 tsconfig)...除非您在./
之外包含了需要由tsc
编译/发出的内容,在这种情况下,它会强制rootDir
自动设置为包含所有源代码的目录。 allowJS
设置告诉tsc
将.js
代码视为源代码,并将其发送到outDir
。
我怀疑当您启用 allowJS
时,src
之外有 .js
代码,tsc 现在必须将其发送到 outDir
,因此它会自动将 rootDir
上移一级。由于 src
现在是 rootDir
的子目录,因此它会在 outDir
中镜像。
参见this answer获取一个解决方案,使您能够让 src
保留 rootDir 并包含来自其外部的代码。
关于node.js - 为什么 `allowJS` 会在我的编译输出中导致不需要的 `src` 子目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48847182/