2012-12-13 139 views
1

我正在开发一个项目,我想将源代码打包到多个模块中(在不同的文件中)。我这样做是为了减少整体重量,因此我只能在特定页面上包含某些部分。TypeScript中的别名外部模块

我遇到的问题是我找不出一个语法,它会让我别名外部模块,我真的不想每次都写出完整的模块(因为它通常是像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.ts
      • b.ts
    • Ç
      • c.ts
      • d.ts

然后别处我还可以具有:

    • d
      • e.ts
      • f.ts
      • Ë
        • g.ts
        • h.ts

在这种情况下,我将建立第一集成类似AB的东西

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 

我建立这些编译器通过一组文件的递归动态命令用类似编译它们TS我指定这样它就可以获得编译器的东西。

+0

能否请你描述你的文件结构和导出定义? – Valentin

回答

1

如果您正在打包在多个文件中的模块,以便使用AMD模块加载模式加载它们,你需要做以下...

文件的名称是模块的名称,你不再增加module声明

例如...

module MyModule { 
    export class MyClass { 
    } 
} 

实际上应该是MyModule.ts,看起来像这样:

export class MyClass { 
} 

你会然后使用加载它:

import my = module('MyModule'); 

我觉得目前你正在尝试与加载的模块式的,这是不兼容的混合的打字稿代码捆绑风格。捆绑时,当您负责在页面上获取脚本时,文件名无关紧要。当您使用AMD或CommonJS时,您需要遵守文件命名规则(即文件名等于模块名称),并省略包含module

作为一个侧面说明,有在0.8.1.1影响这一个bug,所以你可能想通过这种阅读,如果你是0.8.1.1:http://typescript.codeplex.com/discussions/405800

+0

我也有我使用的子模块。在我的情况下,如果模块是A.B.C.D,主模块是A.B,他们都使用,我应该调用文件A.B.ts,并在文件中只有模块C.D,或者有其他方法吗? – samanime

+1

如果你想要一个分层模块结构,你通常会创建一个文件夹结构并具有'A/B/C/D.ts',你可以使用'import abcd = module('./ A/B/C/D');' – Fenton

+0

因此,我创建了更大的模块,然后将其压缩到我可以提供的文件中。如果每个类都在它自己的文件中,那么太多的文件将被服务。我试图做大约50个类(每个都在它自己的文件中)到大约4个JS文件。 – samanime

相关问题