AMD, CMD, COMMONJS

为什么要使用模块化?

  1. Web应用的复杂度提高
  2. 避免命名污染
  3. 管理依赖
  4. 代码解耦, 提高代码的复用性

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

  • 模块的规范
    为什么模块需要规范, 因为虽然有了模块, 我们可以方便的使用别人的代码, 但是有一个前提, 那就是大家必须以相同的方式编写模块, 否则就会乱套. 但是JavaScript模块还没有官方规范, 所以才产生了CommonJS, AMD这样的通用的模块规范
  • CMD
    Common Module Definition, 是SeaJS在推广过程中对模块定义的规范化产出。
    CMD规范应用于浏览器环境
  • AMD
    Asynchronous Module Definition, 是RequireJS在推广过程中对模块定义的规范化产出。
    它采用异步方式加载模块, 模块的加载不影响后面语句的运行, 所有依赖这个模块的语句, 都定义在一个回调函数中, 等加载完成后, 这个回调函数才会运行.
    根据AMD规范, 我们可以使用define定义模块, 使用require调用模块.
//HTML

//模块的加载
require.config({
  paths: {
    "jquery": "jquery.min",
    "underscore": "underscore.min",
    "backbone": "backbone.min"
  }
});
//或者使用baseUrl
require.config({
  baseUrl: "js/lib",
  paths: {
    "jquery": "jquery.min",
    "underscore": "underscore.min",
    "backbone": "backbone.min"
  }
});
//main.js
require(['jquery', 'underscore', 'backbone'], function ($, _, Backbone){
  // some code here
});
//模块定义
define(['myLib'], function(myLib){
  function foo(){
    myLib.doSomething();
  }
  return {
    foo : foo
  };
});

AMD规范应用于浏览器环境

  • CommonJS
    不适用于浏览器环境, 因为模块是同步加载的, 浏览器环境的网速没有本地硬盘的加载速度快, 同步会导致浏览器假死
    Node.js的模块系统, 就是参照CommonJS规范实现的. 在CommonJS中, 有一个全局的方法require(), 用于加载模块.
    CommonJS应用于服务端环境
  • AMD与CMD
    1. 执行
      AMD:提前执行(异步加载:依赖先执行)+延迟执行
      CMD:延迟执行(运行到需加载,根据顺序执行)
    2. CMD 推崇依赖就近,AMD 推崇依赖前置

你可能感兴趣的:(AMD, CMD, COMMONJS)