我们有一个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文件并引用与之对应的.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模块名称之间转换)。

最佳答案



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

关于Typescript编译器为AMD项目重新创建整个目录结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30216767/

10-15 09:01