美文网首页饥人谷技术博客
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