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

问题描述 投票:2回答:2

我正在将Microsoft TypeScript starter作为初始参考,将旧版节点/表达代码库转换为TypeScript。

在此参考中,输出编译为dist,但是当在allowJS中启用tsconfig.json时,输出会发射到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中显示输出

node.js typescript express tsconfig
2个回答
1
投票

这里发生两件事:

  • Typescript依靠rootDir来决定输出的目录结构(请参阅this comment from Typescript's bossman)。
  • rootDir中仅可编译/发出tsc中的代码。
  • 如果没有显式设置rootDir,则默认为./(相对于tsconfig)... 除非您包含了./之外的内容tsc,在这种情况下,它会强制rootDir自动设置为包含所有源的目录。
  • allowJS设置告诉tsc.js代码视为源,并将其也发送到outDir

[我怀疑启用allowJS后,tsc现在必须将.js之外的src代码发送到outDir,因此它会自动将rootDir上移一个级别。由于src现在是rootDir的子目录,因此将其镜像到outDir中。

请参见this answer,该解决方案使您可以使src保留为rootDir,并且还可以包含其外部的代码。


0
投票

听起来像您的编译器(TSC)配置文件的声音,可能是您希望编译器开始链接过程的起点。您可以尝试将其降低到某个水平并让我们知道会发生什么吗?

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.