美文网首页饥人谷技术博客
CMD、AMD、CommonJS 规范

CMD、AMD、CommonJS 规范

作者: 块垒 | 来源:发表于2016-10-11 20:50 被阅读42次

为什么要使用模块化?

最主要的目的:

  • 解决命名冲突
  • 依赖管理

其他价值:

  • 提高代码可读性
  • 代码解耦,提高复用性

CMD、AMD、CommonJS 规范分别指什么?有哪些应用

模块的规范:
定义一个统一的前提,大家必须以同样的方式编写模块。

  • CommonJS:
    CommonJS是服务器端模块的规范。
  1. 在一个模块中,存在一个自由的变量require,他是一个函数
    • 这个require函数接受一个模块标识符
    • require返回外部模块所输出的API
    • 如果出现依赖闭环,那么外部模块在被他的传递一台所require的时候可能并没有执行完成;在这种情况下,require返回的对象必须至少包含此外部模块在调用require函数之前就已经准备完毕输出
    • 如果请求的模块不能返回,那么require必须抛出一个错误
  2. 在一个模块中,会存在一个名为exports的自由变量,它是一个对象,模块可以在执行的时候把自身的API加入其中
  3. 模块必须使用exports对象做唯一表示
  • CMD:
    是SeaJS推广过程中诞生的,在CMD规范中,一个模块就是一个文件,代码的书写格式如下
define(factory)
  • AMD:
    AMD(异步模块定义)指定一种机智,在该机制下模块和依赖可以异步加载。这对浏览器端尤其适用。
define(id?,dependencies?,factory);
  • id:定义中模块的名字,可选:如果没提供该参数,模块的名字应该默认为模块加载器请求的指定的脚本的名字。
  • dependencies:是一个当前模块依赖的,已被模块定义的模块标识的数组字面量。依赖参数是可选的。如果忽略次参数它应该默认为["require", "exports", "module"]。然而,如果工厂方法的长度属性小于3,加载器会选择以函数的长度属性指定的参数个数调用工厂方法。
  • 工厂方法,模块初始化要执行的函数或对象。如果为函数,他应该只被执行一次。如果是对象,此对象应该为模块的输出值。
    示例:
define('modal', ['jQuery', 'dialog'], function($, Dialog){
    $('.modal').show();
    Dialog.open();
});

相关文章

网友评论

    本文标题:CMD、AMD、CommonJS 规范

    本文链接:https://www.haomeiwen.com/subject/jqvbyttx.html