如何在tsconfig.json中指定多个源文件夹?

时间:2016-03-28 23:53:59

标签: unit-testing typescript

我目前有以下项目结构:

project/
  tsconfig.json
  webpack.config.js
  package.json
  node_modules/
    ...lots of dependencies
  typings/
    ...lots of .d.ts files for the dependencies
  src/
    ...folders for files for my projects

我的tsonfig.json看起来像是:

{
"compilerOptions": {
    "module": "commonjs",
    "target": "es5",
    "noImplicitAny": false,
    "outDir": "./js",
    "rootDir": "./src",
    "sourceMap": true,
    "jsx": "react"
},
"exclude": [
    "typings/main.d.ts",
    "typings/main",
    "node_modules"
    ]
}

这一切都运行良好,我可以愉快地开发我的应用程序并在浏览器中运行它。

我现在想为我的项目添加一些单元测试,并且来自Java背景,我最初的本能是将测试放在一个单独的文件夹中:

project/
  test/
    ...all of my test cases

当然,test/文件夹中的文件需要引用我的src/文件夹中的代码。我该如何设置?

或者它是否更好"将测试内联放在src/文件夹中,并为它们分别设置webpack.config.js文件?

对于在大型TypeScript项目中如何实现这一点感到非常困惑。

注意:我看过this,但发现答案不是很有启发性。关于filesGlob的引用特征讨论似乎对我有帮助,但我想知道人们今天是如何做到的?

3 个答案:

答案 0 :(得分:2)

我认为您正在寻找路径映射。使用paths编译器选项,您不仅可以指定映射到单个位置,还可以指定多个位置。这是the documentation的示例:

"compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "*": [
        "*",
        "generated/*"
      ]
    }
}

如果编译器在预期位置找不到模块,则会在“generated”子文件夹中重复模块解析。 baseUrl设置似乎是多余的,但它是强制性的。

答案 1 :(得分:1)

  

或者它是否更好"将测试内联放在src /文件夹中并为它们提供单独的webpack.config.js文件?

这就是我的工作。不要将TypeScript编译器用作模块捆绑器(特别是如果您不使用模块https://github.com/TypeStrong/atom-typescript/blob/master/docs/out.md)。让它使用webpack对浏览器进行编译和捆绑,并按原样使用(如果使用模块commonjs)用于后端(nodejs)。

答案 2 :(得分:1)

现在除了rootDir之外,您还可以使用rootDirs

"rootDirs": ["./scripts", "./src"],

用于多个文件夹。

这是API文档:https://www.typescriptlang.org/docs/handbook/module-resolution.html#virtual-directories-with-rootdirs