【问题标题】:How can I specify multiple source folders in my tsconfig.json?如何在 tsconfig.json 中指定多个源文件夹?
【发布时间】:2016-07-16 08:25:24
【问题描述】:

我目前有以下项目结构:

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"
    ]
}

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

我现在想在我的项目中添加一些单元测试,我最初的直觉是将测试放在一个单独的文件夹中:

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

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

或者将测试内嵌在src/ 文件夹中并为它们单独设置一个webpack.config.js 文件是否“更好”?

真的很困惑这在大型 TypeScript 项目中是如何工作的。

注意:我已经看到this,但发现答案不够启发性。似乎关于filesGlob 的引用功能讨论会对我有所帮助,但我只是想知道人们今天是如何做到这一点的?

【问题讨论】:

    标签: unit-testing typescript


    【解决方案1】:

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

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

    用于多个文件夹。

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 谢谢。我们已经决定使用jest 来运行ts-jest 的测试并将它们内联在src/ 文件夹中。非常适合我们。
      【解决方案3】:

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

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

      【讨论】:

      • 感谢您的回答。我正在使用 webpack 进行捆绑。现在我只有客户端代码(服务器是现有的 Java 代码)。运行测试时,你是真的运行 webpack 并打包了一个完整的 .js 文件,还是有一些花哨的 webpack 模式,比如 webpack-dev-server,它全部在内存中完成?
      • alm 看起来很棒,但是它没有安装在我的 Windows 7 机器上(“npm install”在预发布期间失败 - 看起来您希望我有 bash,但这没有作为先决条件提及) .此外,我不清楚这将如何使我能够在内存中捆绑和运行我的测试。
      猜你喜欢
      • 2015-08-21
      • 2018-04-10
      • 2016-03-03
      • 2011-03-15
      • 2018-09-06
      • 2019-03-13
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多