TypeScript:为什么allowJS选项保留'src / **'文件夹结构?

时间:2018-02-18 00:10:16

标签: node.js typescript express

我将遗留节点/快速代码库转换为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根目录中。
  • 根据我看到的GitHub问题,我尝试将tsconfig.json移动到src,但没有生成输出。

AllowJS

输出在/dist下正确映射,直到allowJS中的tsconfig.json标志开启,之后输出显示在/dist/src

2 个答案:

答案 0 :(得分:2)

这里发生了两件事:

  • Typescript依靠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)配置文件可能位于您希望转换器开始链接过程的位置。你能尝试将它推到一个水平,让我们知道会发生什么吗?

希望这有帮助。