如何让TypeScript编译器不发出目录结构

时间:2017-02-07 08:06:01

标签: node.js unit-testing typescript build tsc

在我当前的TypeScript项目中,我有以下文件结构:

project
├─app
│ └─index.html
├─test
└─src
  ├─app
  │ ├─tsconfig.json
  │ └─app.ts
  ├─lib
  │ └─lib.ts
  └─test
    ├─tsconfig.json
    └─test.ts

我想要实现的是,在为apptest编译此项目时,生成的文件结构如下所示:

project
├─app
│ ├─index.html
│ └─app.js
├─test
│ ├─lib
│ │ └─lib.js
│ └─test.js
└─src
  └─...

或者这个:

project
├─app
│ ├─index.html
│ └─app.js
├─test
│ ├─lib.js
│ └─test.js
└─src
  └─...

我有一个位于lib目录中的库。它由app.ts使用,然后在网页上使用。测试位于测试目录中。我真正得到的是:

project
├─app
│ ├─index.html
│ └─app.js
├─test
│ ├─lib
│ │ └─lib.js
│ └─test
│   └─test.js
└─src
  └─...

注意额外的test - 目录。

src/test/tsconfig.json - 文件如下所示:

{
    "compileOnSave": true,
    "compilerOptions": {
        "target": "es2016",
        "lib": [
            "dom",
            "es2016"
        ],
        "outDir": "../../test",
        "noImplicitAny": true,
        "noImplicitThis": true,
        "noImplicitReturns": true,
        "module": "commonjs"
    },
    "files": [
        "test.ts"
    ]
}

由于我想使用node.js在我的机器上执行这些测试,我不得不选择commonjs作为模块系统。这不会合并所有TypeScript模块,如amd - 模块系统。据我所知,tsc搜索所有相关模块的第一个公共父目录,并将其作为输出的基本目录。该公共目录将是src,这就是输出目录中存在额外级别目录的原因。

所以我的问题是: 如何告诉TypeScript编译器使用src/test作为输出的根目录,以便将test.js放入test/test.js而不放入test/test/test.js

设置"rootDir": "./"不起作用,因为编译器将输出错误:

error TS6059: File '[...]/lib/lib.ts' is not under 'rootDir' '[...]/src/test/'. 'rootDir' is expected to contain all source files.

0 个答案:

没有答案