【问题标题】:Typescript compiler recreates the whole directory structure for AMD projectTypescript 编译器为 AMD 项目重新创建整个目录结构
【发布时间】:2015-07-24 20:32:00
【问题描述】:

我们有一个 AMD Typescript 项目,它的目录结构类似于:

project_root/
 /scripts
   /ts
     module.ts
   /js (generated from the TS files)
 /tests
   /ts
    moduleTest.ts (imports module.ts)
   /js (generated from the TS files)

问题是,当我们编译一个文件,该文件从一个不是导入器目录后代的目录中导入另一个模块(文件)时,TS 编译器会从两个目录的直接共享父目录重建整个树,到js 目录。

例如,将tests/ts/moduleTest.ts(即导入scripts/ts/module.ts)编译到tests/js 目录中,将产生这个tests/js 目录:

project_root/tests/js
  /scripts/ts
     module1.js
  /tests/ts
     module1test.js

而不仅仅是project_root/tests/js 中的module1test.js。 在现实生活中情况会更糟,因为module1.ts 本身会从子目录中导入更多模块,所有这些模块都会被创建到project_root/tests/js 中。
除了导入生成的.js 文件并引用对应的.d.ts 文件而不是导入.ts 文件。是否有创建整个树的解决方案?最好,有没有办法告诉编译器不要编译导入的 TS 文件而只将它们用作参考?

我制作了一个基本的example/testing repository 用作游乐场。要查看我在说什么,从项目根目录运行:

tsc --module amd -t ES5 --outDir tests/js/ tests/ts/module1spec.ts

该项目使用 requireAdapters.d.ts 来避免在 import 语句中使用相对模块名称(换句话说,它在 TS 和 require.js 模块名称之间进行转换)。

【问题讨论】:

    标签: typescript amd


    【解决方案1】:

    有没有创建整个树的解决方案?最好,有没有办法告诉编译器不要编译导入的 TS 文件而只将它们用作参考?

    您可以使用新添加的选项rootDirhttps://github.com/Microsoft/TypeScript/pull/2772

    【讨论】:

    • 不幸的是,rootDir 期望包含所有源,因此在示例中它仍然必须是 project_root,这是编译器无论如何都会计算的。如果我可以将/tests/ts 指定为rootDir,它会起作用。
    【解决方案2】:

    为什么不离开这个结构? 拥有 js 和 ts 文件夹听起来像是一个错误。 您应该将 scriptstests 文件夹并排放置,并有一个 dist 文件夹来保存结果 javascript 文件。

    这样,您将源代码与“二进制代码”(Javascript) 分开,就像将 C++ 编译成 exe 时一样。 dist 文件夹也将保存源地图,并被缩小。

    这也是源代码控制的好习惯,只需将您的 dist 文件夹添加到 .gitignore 文件即可。

    总结一下:转向更好的结构。

    【讨论】:

      猜你喜欢
      • 2010-11-26
      • 2016-06-18
      • 1970-01-01
      • 1970-01-01
      • 2020-08-29
      • 2014-04-09
      • 2016-03-30
      • 1970-01-01
      • 2011-06-13
      相关资源
      最近更新 更多