【问题标题】:Alias External Module in TypeScriptTypeScript 中的别名外部模块
【发布时间】:2012-11-30 21:05:57
【问题描述】:

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

我遇到的问题是我想不出一种语法可以让我给外部模块起别名,而且我真的不想每次都写出完整的模块(因为它通常类似于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
      • c.ts
      • d.ts

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

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

在这种情况下,我会将第一个集合构建成类似于 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

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

【问题讨论】:

  • 您能描述一下您的文件结构和导出定义吗?

标签: javascript typescript


【解决方案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

【讨论】:

  • 我也有子模块。就我而言,如果模块是 A.B.C.D 并且主模块是 A.B 他们都使用,我应该调用文件 A.B.ts 并在文件中只包含模块 C.D,还是有其他方法?
  • 如果你想要一个分层的模块结构,你通常会创建一个文件夹结构并拥有A/B/C/D.ts,你可以使用import abcd = module('./A/B/C/D');加载它
  • 所以,我正在创建更大的模块,然后我希望将这些模块压缩到我可以提供的文件中。如果每个类都在它自己的文件中,那么要提供的文件太多了。我正在尝试对大约 4 个 JS 文件执行大约 50 个类(每个类都在它自己的文件中)。
  • 我的目标是每个模块一个文件,直到它变得太笨重,而不是每个类一个文件。
  • 我的 TypeScript 项目也作为每个文件一个类。然后我使用 GruntJS,并让我的 grunt 文件将文件连接成一个,包装在模块模式中(当项目文件将在浏览器中使用时),对其进行 jslint,对其进行单元测试,并在成功时将其缩小,然后复制单个文件的非缩小和缩小版本到分发文件夹。我使用 Visual Studio,所以我在项目构建时触发了我的 grunt 命令。
猜你喜欢
  • 2012-10-02
  • 2015-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 2014-04-05
  • 2017-03-08
相关资源
最近更新 更多