Typescript编译器为AMD项目重新创建整个目录结构

时间:2015-05-13 13:45:28

标签: typescript amd

我们有一个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

而不仅仅是module1test.js中的project_root/tests/js。 在现实生活中,它会更糟糕,因为module1.ts本身会从子目录中导入更多模块,所有这些模块都被创建为project_root/tests/js。 除了导入生成的.js文件并引用corecponding .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模块名称之间进行转换)。

2 个答案:

答案 0 :(得分:1)

  

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

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

答案 1 :(得分:1)

为什么不从这个结构继续前进? 拥有一个js和ts文件夹听起来像是一个错误。 您应该将脚本测试文件夹彼此相邻,并使用 dist 文件夹保存结果javascript文件。

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

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

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