模块化的发展

function m1(){
  //...
}
function m2(){
  //...
}
var module1 = new Object({
  _count: 0,
 m1: function (){
    //...
  },
  m2: function (){
    //...
  }
});
(function () {
 var m1 = function (){
    //...
  };
  var m2 = function (){
    //...
  };
}());
var module1 = (function(){
  var _count = 0;
 var _m1 = function (){
    //...
  };
  var _m2 = function (){
    //...
  };
  return {
    m1: _m1,
    m2: _m2
  };
});
var module1 = (function (mod){
  mod.m3 = function () {
    //...
  };
  return mod;
})(module1);
var module1 = (function ($) {
  //...
})(jQuery);

CommonJS

CommonJS定义的模块分为:{模块引用(require)} {模块定义(exports)} {模块标识(module)}
require()用来引入外部模块;exports对象用于导出当前模块的方法或变量,唯一的导出口;module对象就代表模块本身。

const http = require('http');

http.createServer( (request, response) => {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World\n');
}).listen(12880);

console.log('Server running at http://127.0.0.1:12880/');

AMD

Asynchronous Module Definition

require([module], callback);

require.js
curl.js

// main.js
require(['moduleA', 'moduleB', 'moduleC'], function (moduleA, moduleB, moduleC){
  // some code here
});
require(['jquery', 'underscore', 'backbone'], function ($, _, bb){
  // some code here
});
require.config({
  paths: {
    "jquery": "libs/jquery.min",
    "underscore": "libs/underscore.min",
    "backbone": "libs/backbone.min"
  }
});
// math.js
define(function (){
  var add = function (x,y){
    return x+y;
  };
  return {
    add: add
  };
});
require.config({
  shim: {
    'underscore':{
      exports: '_'
    },
    'backbone': {
      deps: ['underscore', 'jquery'],
      exports: 'Backbone'
    }
  }
});