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

Dav*_*kes 7 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
Run Code Online (Sandbox Code Playgroud)

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"
    ]
}
Run Code Online (Sandbox Code Playgroud)

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

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

project/
  test/
    ...all of my test cases
Run Code Online (Sandbox Code Playgroud)

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

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

真的很困惑这在大型TypeScript项目中如何在实践中工作.

注意:我已经看过这个,但发现答案不是很有启发性.看来引用的功能讨论filesGlob会对我有所帮助,但我只是想知道人们今天是怎么做的?

Hon*_*iao 6

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

"rootDirs": ["./scripts", "./src"],
Run Code Online (Sandbox Code Playgroud)

对于多个文件夹。

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


lex*_*x82 5

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

"compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "*": [
        "*",
        "generated/*"
      ]
    }
}
Run Code Online (Sandbox Code Playgroud)

如果编译器在预期位置没有找到模块,它将在“生成的”子文件夹中重复模块解析。该baseUrl设置看似多余,但却是强制性的。


bas*_*rat 1

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

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