zoukankan      html  css  js  c++  java
  • CommonJS, AMD, CMD 笔记

    1.CommonJS 

    根据CommonJS规范,一个单独的文件就是一个模块。加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的exports对象。所以,定义一个模块就是写一个新的js文件,但是最后要将文件的内容exports出来。接下来我们看一下如何定义模块和加载模块。

    //module1.js
    exports.foo = function () {
      console.log('this is module1 foo');  
    }
    
    //main.js
    let module1 = require('./module1');
    
    module1.foo();

    如上代码,定义module1模块文件  在主入口引入 并调用方法,exports也可以换成module.exports 两者关系是前者引用后者,最终导出的函数 变量等等都是以module.exports为准,当然 exports=2这种修改是不起作用的。

    nodejs 用的就是CommonJS规范.

    2.AMD

    AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。

    AMD也采用require()语句加载模块,但是不同于CommonJS,它要求两个参数:

      require([module], callback);

    第一个参数[module],是一个数组,里面的成员就是要加载的模块;第二个参数callback,则是加载成功之后的回调函数。如果将前面的代码改写成AMD形式,就是下面这样:

    require(['math'], function (math) {
    
        math.add(2, 3);
    
      });

    看到这段代码就想起了angularJS,好像是angular1的时候有类似这样的代码。

     3.CMD

    CMDseajs推崇的规范,CMD则是依赖就近,用的时候再require。它写起来是这样的:

    define(function(require, exports, module) {
       var clock = require('clock');
       clock.start();
    });

    这里具体到使用的时候再来决定加载哪些文件,AMD  CMD都是异步加载.

    总结:CommonJs主要针对服务端,AMD/CMD主要针对浏览器端,所以最容易混淆的是AMD/CMD。(顺便提一下,针对服务器端和针对浏览器端有什么本质的区别呢?服务器端一般采用同步加载文件,也就是说需要某个模块,服务器端便停下来,等待它加载再执行。这里如果有其他后端语言,如java,经验的‘玩家’应该更容易理解。而浏览器端要保证效率,需要采用异步加载,这就需要一个预处理,提前将所需要的模块文件并行加载好。)

    AMDCMD最大的区别是对依赖模块的执行时机处理不同,而不是加载的时机或者方式不同,二者皆为异步加载模块。
    AMD依赖前置,js可以方便知道依赖模块是谁,立即加载;而CMD就近依赖,需要使用把模块变为字符串解析一遍才知道依赖了那些模块

  • 相关阅读:
    工程师的十层楼,上
    工程师的十层楼 (下)
    2011CCTV中国经济年度人物评选结果揭晓
    IT行业程序员薪水差距之大的原因是什么
    单片机C应用开发班
    【分享】对输入子系统分析总结
    P6156 简单题 题解
    P3911 最小公倍数之和 题解
    dp 做题记录
    UVA12298 Super Poker II 题解
  • 原文地址:https://www.cnblogs.com/tudou1223/p/10049121.html
Copyright © 2011-2022 走看看