为什么"allowJS"在我的编译输出中会导致不需要的"src"子目录?



我正在将遗留节点/快速代码库转换为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) 配置文件可能比您希望转译器开始链接过程的位置更高。你能试着把它推低一个级别,让我们知道会发生什么吗?

希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新