0

我开始使用 Web Essentials,我看到有一个选项“使用 AMD 模块”。我正在为 ASP MVC4 应用程序使用打字稿。有人可以解释一下 AMD 模块的全部内容吗?这是我应该知道的吗?

4

1 回答 1

1

AMD 是格式化和加载模块化 JavaScript 的一种方式。见这里:http ://addyosmani.com/writing-modular-js/尤其是这里:http ://requirejs.org/docs/whyamd.html

引用后一个来源:

AMD 格式来自于想要一种模块格式,它比今天的“编写一堆具有隐含依赖关系的脚本标签,您必须手动订购”以及易于直接在浏览器中使用的东西。

本质上,AMD 允许您按需加载 JavaScript 模块,并提供一种封装其内容的格式,这样全局命名空间就不会受到污染。

在 TypeScript 中,将您发现的 AMD 编译器开关设置为“on”,您可以像这样导出一个模块:

export module pe.components {
    export class Component {  // 'export' makes this visible outside the module

    }

    class FriendComponent { // no 'export' so this is only visible inside the module.

    }
}

在另一个文件中,您像这样导入此模块:

import c = module('relative-path-to-file/pe.components');

然后像这样使用它:

var component:Component = new c.pe.components.Component();// 有效,因为组件已导出

...但不是这个:

var friend:FriendComponent = new c.pe.components.FriendComponent();// 不应该工作*,因为没有导出 FriendComponent。

(* 有一个错误使非导出的接口在其声明模块之外可见。我认为这已在 TS 0.8.1 中修复)。

至于你问题的第二部分 - 这真的太宽泛了。如果您的架构要求您加载新功能(例如,单页应用程序中的插件或小程序),那么是的,AMD 模块和加载框架(如RequireJS )可能是可行的方法。另一方面,如果您事先知道用户将需要的所有功能,那么您最好彻底缩小脚本并提前将它们作为单个文件加载。

我认为您使用 MVC 的事实与此处无关:问题是您的客户端架构是否需要异步、模块化的方法。

于 2012-11-22T15:23:03.670 回答