【问题标题】:Transpile all TypeScript files to a relative adjacent directory将所有 TypeScript 文件转换到相对相邻的目录
【发布时间】:2017-06-17 18:34:55
【问题描述】:

我正在使用 TypeScript 编写基于 JavaScript 的测试。

我想要一个tsc --watch 命令,以便能够正确处理所有文件的转换,这是关键部分。我认为使用多个 tsconfig.json 文件是这里的方法。

我有这个结构:

/tests
  /e2e
     tsconfig.json
    /src
    /target
  /unit
     tsconfig.json
    /src
    /target

我想把 TypeScript 文件放在 src 目录中,然后转译到目标目录中。

我的问题是 - 如果您有一个可以将文件列表作为输入的 bash 脚本,您如何将文件转换到它们各自的目标目录中?

例如,输入文件:

/home/you/projects/x/test/e2e/src/a.ts
/home/you/projects/x/test/e2e/src/b.ts
/home/you/projects/x/test/e2e/src/c.ts
/home/you/projects/x/test/unit/src/foo.ts
/home/you/projects/x/test/unit/src/bar.ts
/home/you/projects/x/test/unit/src/baz.ts

所需的输出文件:

/home/you/projects/x/test/e2e/target/a.js
/home/you/projects/x/test/e2e/target/b.js
/home/you/projects/x/test/e2e/target/c.js
/home/you/projects/x/test/unit/target/foo.js
/home/you/projects/x/test/unit/target/bar.js
/home/you/projects/x/test/unit/target/baz.js

有没有办法让tsc 命令获取这些文件并将它们全部转换为一个单行命令到它们各自的目标目录?

我认为这可能非常棘手。我可能必须按它们的目录名对它们进行分组,并分别转换每个组。那会困难得多。

【问题讨论】:

  • 你是如何编译它们的?
  • tsc 有一个 target dir 选项可以做到这一点,你可以在 tsconfig.json 中设置它:-/
  • outDir in tsconfig.json 就是你要找的东西
  • 各位,应该有两个不同的outDirs,仔细阅读问题
  • 你可以做的是用不同的配置创建 2 个项目(如果你使用 gulp/grunt 更容易)并使用 include 编译器选项来包含不同的文件。

标签: javascript bash typescript typescript2.0 tsc


【解决方案1】:

我认为您无法获得原生的tsc --watch 来支持该项目结构,但您可以使用gulpgulp-typescript。它们允许您在几个不同的 TypeScript 项目上同时设置监视,每个项目都有自己的 tsconfig.json

如果这些子目录之间存在依赖关系,请考虑使用lerna。否则,您的目标目录中可能会出现令人惊讶的布局。额外级别的目录是让我研究这个的最初问题。使用 lerna,您将设置单独的 package.json 文件来记录依赖关系。然后lerna bootstrap 可以负责设置符号链接来解析引用。

使用lerna,您可能希望将一些package.json 文件标记为"private": true,如果它们不打算发布到npm。

【讨论】:

  • 谢谢,我最终可能会写一些基本上为每个 tsconfig.json 文件生成一个“tsc -w”的东西。
【解决方案2】:

我为此创建了一个工具:

github.com/ORESoftware/tsc-multi-watch

它将在您的项目中搜索/tsconfig.*\.json/ 文件,并为每个文件生成一个 tsc -w 进程。

不仅如此,它还解决了 tsc --watch 的另一个不足。 tsc --watch 无法考虑添加到项目中的新文件。

.ts 文件添加到项目中时,tsc-multi-watch 将重新启动正确的tsc -w 进程。

【讨论】:

  • 看起来不错,但它仍然是一个很小的 ​​tsc 本身并不支持这一点,因为任何产生单独 tsc 进程的解决方案在大型项目中的扩展性都很差,会占用 CPU 和内存的开销。
  • 是的,仍然很遗憾..我同意,没有很好的解决方案,但我认为多个 tsc 进程每个看 8 个文件并不比 1 个 tsc 进程看 64 个文件差多少,等等。它们大多是空转。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-20
  • 1970-01-01
  • 2019-05-14
  • 1970-01-01
相关资源
最近更新 更多