1

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

我遇到的问题是我无法弄清楚可以让我为外部模块起别名的语法,而且我真的不想每次都写出完整的模块(因为它通常类似于 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."'

如果重要,我会导出我的所有类,但不导出任何模块。我生成了包含的定义文件(所以在我编译时,包含 ABCD 的定义文件在我的列表中是第一个)。

有任何想法吗?

更新

为了详细说明我的文件结构,我有这样的事情:

  • 一个
      • a.ts
      • b.ts
    • C
      • c.ts
      • d.ts

然后在其他地方我也可能有:

  • 一个
    • D
      • f.ts
        • g.ts
        • h.ts

在这种情况下,我会将第一组构建成类似于 ABts 的东西,方法是使用以下内容编译它们:

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

我通过递归一组我指定的文件来动态构建这些编译器命令,以便它获取那些编译器的东西。

4

1 回答 1

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

于 2012-12-13T10:25:18.750 回答