我正在开发一个项目,我希望将源代码打包到多个模块(在不同的文件中)。我这样做,所以我只能在某些页面上包含某些部分以减轻整体重量。
我遇到的问题是我无法找出一种语法,它会让我对外部模块进行别名,而且我真的不想每次都写出完整的模块(因为它通常类似于ABCD组织)。
编译时,我有一个抓取所有文件的脚本,因此我将外部定义文件作为第一个参数。
如果我写出整个模块(A.B.C.D.MyClass)
,它就会认出来。如果我试着这样做:
module MyModule {
import ABCD = A.B.C.D;
export MyClass {
//...
public myFunc(obj:ABCD.MyClass) {}
}
}
它会告诉我'The name "ABCD" does not exist in the current scope."'
如果重要,我会导出所有类,但不导出任何模块。我生成了包含的定义文件(因此编译时包含A.B.C.D的定义文件在我的列表中是第一个。)
有什么想法吗?
详细说明我的文件结构,我有类似的东西:
然后在其他地方我也可能有:
在这种情况下,我会将第一个集合构建成类似A.B.ts的东西,通过以下方式编译它们:
tsc A/B/a.ts A/B/b.ts A/B/C/c.ts A/B/C/d.ts --out A.B.ts --declarations
然后,当我去打包时,我会做类似的事情:
tsc /path/to/A.B.d.ts A/D/e.ts A/D/f.ts A/D/E/g.ts A/D/E/h.ts --out A.D.ts --declarations
我通过递归通过我指定的一组文件动态构建这些编译器命令,以便获取那些编译器。
答案 0 :(得分:1)
如果要将模块打包在多个文件中以便使用AMD模块加载模式加载它们,则需要执行以下操作...
文件名是模块名称,不添加module
声明
例如......
module MyModule {
export class MyClass {
}
}
实际上应该是MyModule.ts
并且看起来像这样:
export class MyClass {
}
然后您将使用以下方式加载它:
import my = module('MyModule');
我认为您目前正在尝试将捆绑式TypeScript代码与加载的模块样式混合在一起,这是不兼容的。捆绑时,文件名无关紧要,因为您负责在页面上获取脚本。当您使用AMD或CommonJS时,您需要遵守文件命名规则(即文件名等于模块名称)并忽略封闭的module
。
作为旁注,0.8.1.1中存在影响此问题的错误,因此如果您使用的是0.8.1.1,则可能需要仔细阅读:http://typescript.codeplex.com/discussions/405800