Typescript编译器选项-尝试将“平面”输出输出到outDir

时间:2019-09-30 17:54:41

标签: typescript tsconfig

我有一个src目录,其中包含源代码和单元测试,还有一个test目录,其中包含单独的速度测试。

当我使用tsc构建项目时,会得到如下目录结构:

dist/
  src/
    index.js
    ...
  test/
    speed-test.js

但是,我希望将“ flat”输出输出到我的dist目录中,如下所示:

dist/
  index.js
  ...
  speed-test.js
  ...

如果我从speed-test.ts目录中删除test,则tsc不会将src目录添加到dist中。仅在有必要(或至少在tsc决定有需要)使编译后的代码源不清时才添加额外的目录结构。

我确信有时这对于避免文件名冲突非常有用,但是在这种情况下这对我来说并不重要,我宁愿不要获得此额外的“帮助”。

这是我的tsconfig.json

{
  "compilerOptions": {
    "target": "ES6",
    "module": "commonjs",
    "outDir": "./dist",
    "noImplicitAny": true,
    "noImplicitThis": true,
    "alwaysStrict": true,
    "noImplicitReturns": true,
    "moduleResolution": "node",
    "esModuleInterop": true,
    "declaration": true,
    "declarationMap": true,
    "sourceMap": true,
    "resolveJsonModule": true,
    "allowSyntheticDefaultImports": true
  }
}

我尝试添加"rootDirs"的{​​{1}}选项,但这无济于事。

反正我有没有想要的输出结构?

1 个答案:

答案 0 :(得分:1)

如果您要省略src下的额外testdist文件夹,您将要告诉tsc,它只应编译{下的文件{1}}与给定的src

默认情况下,编译器将项目工作区中的所有文件包括在内,因此它需要额外的文件夹结构来区分tsconfig.jsonsrc。这也是为什么删除testsrc中没有创建任何dist文件夹的原因-现在所有文件都在speed-test.ts下,因此编译器选择此目录为根。您只能通过include/exclude/files这样的编译器选项将编译限制为src

src

使用rootDir,您还可以强制{ "compilerOptions": { ... }, "include": [ "src/**/*" ] } 中输出的父目录始终为dist,即使您偶然src来自{{ 1}}中的一个模块(如果未指定,import将自动计算为所有输入的父目录)。在这种情况下,src将终止编译,因为rootDir不再是所有输入文件的根。

tsc

对于测试文件,您可以使用rootDir之类的不同配置(或通过{ "compilerOptions": { "rootDir": "src", ... } } CLI)执行单独的编译步骤。例如。玩笑,here是带有自定义配置文件的示例。或者,您可以只使用tsconfig.test.json CLI来编译tsc,然后使用选择的测试工具(不确定要使用的工具是什么)。

希望,有帮助!