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

Lio*_*ior 6 amd typescript

我们有一个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)
Run Code Online (Sandbox Code Playgroud)

问题是当我们编译一个文件时,该文件从一个目录导入另一个模块(文件),该目录不是导入程序目录的后代,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
Run Code Online (Sandbox Code Playgroud)

而不仅仅是module1test.js单独的project_root/tests/js.在现实生活中,它甚至会更糟糕,因为module1.ts它本身会从子目录中导入更多模块,所有这些模块都被创建project_root/tests/js.
除了导入生成的.js文件和引用corecponding .d.ts文件而不是导入.ts文件.有没有解决整个树的创建?最好是,有一种方法可以告诉编译器不要编译导入的TS文件,而只是将它们用作参考吗?

我已经建立了一个基本的示例/测试存储库用作游乐场.要查看我正在谈论的内容,请从项目根目录运行:

tsc --module amd -t ES5 --outDir tests/js/ tests/ts/module1spec.ts
Run Code Online (Sandbox Code Playgroud)

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

bas*_*rat 1

有没有解决方案来创建整棵树?最好有办法告诉编译器不要编译导入的 TS 文件而仅将其用作参考吗?

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