我开始使用 Web Essentials,我看到有一个选项“使用 AMD 模块”。我正在为 ASP MVC4 应用程序使用打字稿。有人可以解释一下 AMD 模块的全部内容吗?这是我应该知道的吗?
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 的事实与此处无关:问题是您的客户端架构是否需要异步、模块化的方法。