为什么 `allowJS` 在我的编译输出中导致不需要的 `src` 子目录?
Why does `allowJS` cause an unwanted `src` subdirectory in my compiled output?
我正在将遗留 node/express 代码库转换为 TypeScript,遵循 Microsoft TypeScript starter 作为起始参考。
在此参考中,输出被编译为 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
下正确映射,直到 allowJS
标志在 tsconfig.json
中打开,之后输出出现在 /dist/src
中
听起来您的编译器 (TSC) 配置文件可能比您希望转译器开始链接过程的位置高一个级别。您能否尝试将其降低一个级别并让我们知道会发生什么?
希望对您有所帮助。
这里发生了两件事:
- Typescript 依赖
rootDir
来决定输出的目录结构(参见 this comment from Typescript's bossman)。
- 只有
rootDir
内的代码可以被 tsc
compiled/emitted。
- 如果您没有明确设置
rootDir
,它默认为 ./
(相对于 tsconfig)...除非您包含了 [=14 之外的内容=] 需要 tsc
compiled/emitted,在这种情况下,它会强制 rootDir
自动设置为包含所有源的目录。
allowJS
设置告诉 tsc
将 .js
代码视为源并将其发送到 outDir
。
我怀疑当您启用 allowJS
时,在 src
之外有 .js
代码,tsc 现在必须发送到 outDir
,因此它自动移动rootDir
更上一层楼。由于 src
现在是 rootDir
的子目录,这在 outDir
.
中得到镜像
请参阅 this answer 以获取使您 src
保留 rootDir 并包含其外部代码的解决方案。
我正在将遗留 node/express 代码库转换为 TypeScript,遵循 Microsoft TypeScript starter 作为起始参考。
在此参考中,输出被编译为 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
下正确映射,直到 allowJS
标志在 tsconfig.json
中打开,之后输出出现在 /dist/src
听起来您的编译器 (TSC) 配置文件可能比您希望转译器开始链接过程的位置高一个级别。您能否尝试将其降低一个级别并让我们知道会发生什么?
希望对您有所帮助。
这里发生了两件事:
- Typescript 依赖
rootDir
来决定输出的目录结构(参见 this comment from Typescript's bossman)。 - 只有
rootDir
内的代码可以被tsc
compiled/emitted。 - 如果您没有明确设置
rootDir
,它默认为./
(相对于 tsconfig)...除非您包含了 [=14 之外的内容=] 需要tsc
compiled/emitted,在这种情况下,它会强制rootDir
自动设置为包含所有源的目录。 allowJS
设置告诉tsc
将.js
代码视为源并将其发送到outDir
。
我怀疑当您启用 allowJS
时,在 src
之外有 .js
代码,tsc 现在必须发送到 outDir
,因此它自动移动rootDir
更上一层楼。由于 src
现在是 rootDir
的子目录,这在 outDir
.
请参阅 this answer 以获取使您 src
保留 rootDir 并包含其外部代码的解决方案。