前端开发知识点摘记

AMD规范和CMD规范

2017-07-08  本文已影响318人  忽如寄

AMD(异步模块定义规范)制定定义模块的规则,模块和模块的依赖是异步加载的。

AMD通过define()函数定义一个模块:

define(?id, dependencies?, factory );

id:为模块的名字,可选,
dependencies:该模块所依赖模块的数组,可选,模块名可以是相对或者绝对,忽略此参数则默认为["require", "exports", "module"]
factory:模块初始化要执行的函数或对象,函数则执行一次,对象则为模块的输出值。
一些例子:
创建一个名为"alpha"的模块,使用了require,exports,和名为"beta"的模块:

define("alpha", ["require", "exports", "beta"], function (require, exports, beta) {
       exports.verb = function() {
           return beta.verb();
           //Or:
           return require("beta").verb();
       }
   });

一个返回对象的匿名模块:

define(["alpha"], function(alpha){
    return {
        verb: function(){
            return alpha.verb() + 2;
        }
    }
})

一个没有依赖性的模块可以直接定义对象:

define({
    add: function(x, y) {
         return x + y;
    }
})

使用CommonJS转换的模块定义:

define(function(require, exports, module) {
    var a = require('a'),
           b = require('b');

    exports.action = function(){};
})

CMD规范
在CMD中,一个模块就是一个文件,通过define()函数定义一个模块

define(factory);

factory可以是一个函数,也可以是一个对象或者字符串。当为函数的时候,如果指定参数,则必须为require、exports、module的顺序,即:

define(function(require, exports, module) {
    
})

其中require引入一个外部模块,当这个外部模块没有被返回时,应该返回null。
require.async()函数为加载异步加载的模块。
exports对象用来导出模块中的方法等。
module对象:module.uri为该模块的完整uri路径,module.dependencies为该模块需要的外部模块,module.exports等同于exports

其中模块名必须为一个字符串,模块标识符可以没有后缀,模块路径可以是相对路径
math.js

define(function(require, exports, module) {
  exports.add = function() {
    var sum = 0, i = 0, args = arguments, l = args.length;
    while (i < l) {
      sum += args[i++];
    }
    return sum;
  };
});

increment.js

define(function(require, exports, module) {
  var add = require('math').add;
  exports.increment = function(val) {
    return add(val, 1);
  };
});

program.js

define(function(require, exports, module) {
  var inc = require('increment').increment;
  var a = 1;
  inc(a); // 2

  module.id == "program";
});

模块中factory不是函数的

define({
    foo: "bar"
})

define([
    "foo",
    "bar"
])

define('foo bar')
上一篇 下一篇

猜你喜欢

热点阅读