AMD/CMD/CommonJs的区别与使用

CommonJs

主要针对服务端(同步加载文件),对应的实现是nodejs

CommonJS定义的模块分为:{模块引用(require)} {模块定义(exports)} {模块标识(module)}

require()用来引入外部模块;exports对象用于导出当前模块的方法或变量,唯一的导出口;module对象就代表模块本身。

eg:

//以下代码在一个js文件里,一个文件就是一个模块

//私有变量 
var test = "private"; 

//公有方法 
function example () { 

    this.foo = function () { 
        // do someing ... 
    } 
    this.bar = function () { 
        //do someing ... 
    } 
} 

//exports对象上的方法和变量是公有的 
var example = new example(); 
exports.foobar = foobar;


AMD 

主要针对浏览器端(异步加载文件),预加载文件。对应的实现是requirejs

AMD也采用require()语句加载模块,但是不同于CommonJS,它要求两个参数:require([modules], callback);
第一个参数[modules],是需加载的模块名数组;第二个参数callback,是模块加载成功之后的回调函数。

eg:

define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好  
a.doSomething()  
b.doSomething()  
//...  
})



CMD

主要针对浏览器端(异步加载文件),按需加载文件。对应的实现是seajs

eg:

define(function(require, exports, module) {  
var a = require('./a')  
a.doSomething()  
var b = require('./b') // 依赖可以就近书写  
b.doSomething()  
// ...   
}) 



对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。CMD 推崇依赖就近,AMD 推崇依赖前置。


其他参考文档:js模块化编程之彻底弄懂CommonJS和AMD/CMD!

【新手入门 最精炼总结】AMD/CMD/CommonJs到底是什么?它们有什么区别?

你可能感兴趣的:(AMD/CMD/CommonJs的区别与使用)