如何配置tsconfig.json将文件从多个源文件夹输出到单个平面outDir?

时间:2017-10-29 00:29:13

标签: typescript tsconfig

我有多个打字稿项目(例如clientserver),它们共享一些常用功能(位于common文件夹中)。考虑这个文件夹结构:

+ client
|  - tsconfig.json
|  + src
|     - client.ts
+ common
   + src
      - util.ts

client.ts以这种方式导入实用程序:

import { Util } from '../../common/src/util';

为简洁起见,我省略了server文件夹,该文件夹与client处于同一级别。在转换到out文件夹之后,我想得到这个简单的平面文件夹结构:

+ client
|  + out
|     - client.js
|     - util.js

...理想情况下,我只需导入实际文件夹的常用实用程序无关:

import { Util } from './util';

如何配置tsconfig.json来实现这一目标?

我尝试了rootDirsbaseUrlpaths的不同组合,但我仍然获得clientcommon子文件夹(甚至包括他们的{ {1}}下的{1}}子文件夹。

3 个答案:

答案 0 :(得分:1)

我在当前项目(具有相同的设置)中解决了这个问题,方法是将公共库的链接放入两个源中。

common/
  src/
    lib/
client/
  src/
    lib/ -> $PROJECT_PATH/common/src/lib/
server/
  src/
    lib/ -> $PROJECT_PATH/common/src/lib/

编译和捆绑变得透明,因为工具将该目录视为本地目录。

答案 1 :(得分:1)

现在我们支持Typescript 3.0中的项目引用(即,级联构建多个Typescript项目)。我们还可以控制tsc构建的输出位置。

https://blogs.msdn.microsoft.com/typescript/2018/07/30/announcing-typescript-3-0/#project-references

如果Typescript项目'bar'使用项目'foo',则按以下方式链接它们:

// ./src/bar/tsconfig.json
{
    "compilerOptions": {
        // Needed for project references.
        "composite": true,
        "declaration": true,

        // Other options...
        "outDir": "../../lib/bar",
        "strict": true, "module": "esnext", "moduleResolution": "node",
    },
    "references": [
        { "path": "../foo" }
    ]
}

谢谢,TS家伙!

答案 2 :(得分:0)

截至目前,你不能。

我处于类似于你的情况,我环顾四周,但似乎没有办法用TypeScipt配置改变这种行为。

你可以做的最好的事情就是在每次构建之后使用别的东西(一个Grunt任务,一个shell脚本......)来移动js文件并删除生成的文件夹。