/**
* CommonJS 模块化规范
* CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作
*/
/*-------Node.js遵循Commonjs规范---------*/
//写法1.
var exports=module.exports;
exports.name="leyi";
exports.fn=function(){
return 'hello world!'
};
//写法2.
module.exports={
"name":'leyi',
"fn":function(){
return 'hello world!'
}
};
//写法3.
module.exports=function(){
this.name='leyi';
this.fn=function(){
return 'hello world!'
}
};
/**
* AMD 模块化规范 -推崇依赖前置
* AMD规范则是非同步加载模块,允许指定回调函数。由于Node.js主要用于服务器编程,模块文件一般都已经存在于本地硬盘,
* 所以加载起来比较快,不用考虑非同步加载的方式,所以CommonJS规范比较适用。
* 但是,如果是浏览器环境,要从服务器端加载模块,这时就必须采用非同步模式,因此浏览器端一般采用AMD规范。
*/
/*-------require.js遵循的AMD规范---------*/
//依赖一开始写好,默认推荐写法如下
define(['./aaa', './bbb'], function(a, b) {
a.xxx();
b.xxx();
});
//AMD规范也支持Commonjs规范的写法,跟下面的CMD写法一样,define写成这样
define(function(require,exports,module){
//...
});
/**
* CMD 模块化规范 -推崇依赖就近
* 代码在运行时,首先是不知道依赖的,需要遍历所有的require关键字,找出后面的依赖。
* 具体做法是将function toString后,用正则匹配出require关键字后面的依赖。
*/
/*-------sea.js遵循的CMD规范---------*/
define(function(require,exports,module){
var aaa=require('./aaa');
aaa.xxx();
var bbb=require('./bbb');
bbb.xxx();
exports.fn=function(){
aaa.xxx();
}
});
/*兼容多种模块规范的写法*/
!(function(moduleName,fn){
//上下文为amd或cmd环境
if(typeof define === 'function'){
define(fn);
//上下文为commonjs环境
}else if('undefined' !== typeof module && !!module && !!module.exports){
module.exports=fn();
}else{
//挂载到全局作用域上
this[moduleName]=fn();
}
}('moduleName',function(){
var obj={"name":"leyi"}
return obj;
}));
CommonJs、AMD、CMD模块化规范
程序员文章站
2022-03-04 13:36:57
...
推荐阅读
-
前端笔记之ES678&Webpack&Babel(下)AMD|CMD规范&模块&webpack&Promise对象&Generator函数
-
javascript模块化编程之AMD模块化编程规范实例讲解
-
再次梳理AMD、CMD、CommonJS、ES6 Module的区别
-
CommonJS、AMD、UMD、CMD使用介绍
-
Node基础-CommonJS模块化规范
-
JavaScript模块化-CommonJS、AMD、CMD、UMD、ES6
-
前端模块化:CommonJS,CMD,AMD,ES6
-
JavaScript模块化开发(三) —— AMD规范
-
JavaScript模块化开发(二)——CommonJS规范
-
JavaScript模块化开发(三) —— AMD规范