/**
* 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模块化规范的更多相关文章

  1. 关于 CommonJS AMD CMD UMD 规范的差异总结

    一.CommonJS 主要是用于服务器端的规范,比如目前的nodeJS. 根据CommonJS规范,一个单独的文件就是一个模块.每一个模块都是一个单独的作用域,也就是说,在一个文件定义的变量(还包括函 ...

  2. 关于 CommonJS AMD CMD UMD 规范的差异总结(转)

    根据CommonJS规范,一个单独的文件就是一个模块.每一个模块都是一个单独的作用域,也就是说,在一个文件定义的变量(还包括函数和类),都是私有的,对其他文件是不可见的. // foo.js var ...

  3. Javascript模块化编程之CommonJS,AMD,CMD,UMD模块加载规范详解

    JavaSript模块化 在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发?     模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问 题进行系 ...

  4. JavaScript模块化CommonJS/AMD/CMD/UMD/ES6Module的区别

    目录 JS-模块化进程 原始的开发方式 CommonJS && node.js AMD && Require.js CMD && Sea.js UMD ...

  5. 插件兼容CommonJS, AMD, CMD 和 原生 JS

    模块标准 CommonJS CommonJS 有三个全局变量 module.exports 和 require.但是由于 AMD 也有 require 这个全局变量,故不使用这个变量来进行检测. 如果 ...

  6. CommonJS, AMD, CMD是什么及区别--简单易懂有实例

    CommonJS, AMD, CMD都是JS模块化的规范. CommonJS是服务器端js模块化的规范,NodeJS是这种规范的实现. AMD(异步模块定义)和CMD(通用模块定义)都是浏览器端js模 ...

  7. [转] 插件兼容CommonJS, AMD, CMD 和 原生 JS

    模块标准 CommonJS CommonJS 有三个全局变量 module.exports 和 require.但是由于 AMD 也有 require 这个全局变量,故不使用这个变量来进行检测. 如果 ...

  8. 研究一下javascript的模块规范(CommonJs/AMD/CMD)

    最近写react需要使用nodejs作为开发环境,需要通过npm安装一些第三方的依赖库,因此慢慢感觉到nodejs基础薄弱对我带来了一些不安全感,尤其是javascript模块这一块听到了很多概念,比 ...

  9. JS JavaScript模块化(ES Module/CommonJS/AMD/CMD)

    前言 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来js得到重视,应用也广泛起来了, jQuery,Ajax,Node.Js,MVC,MVVM等的助力也使得 ...

随机推荐

  1. CF 1060E. Sergey and Subway

    题目链接 题意:给你一棵树,然后连接两个有公共邻居的点,问你连完后,任意两点的距离之和. 一开始看这种题,还不怎么会做,借鉴了这位大佬的博客,get到了新技能,当我们求树上任意俩点的距离之时,可以转化 ...

  2. python之MD5加密

    一. MD5加密import hashlib #Python3里的引用#import md5 #Python2里的引用 1. md5是不可逆的,不能解密2. 所有语言生成的md5串都是一样的 3. 不 ...

  3. nodejs设置允许跨域

    //设置服务器跨域权限app.use(function (req, res, next) {    res.header("Access-Control-Allow-Origin" ...

  4. Codeforces Round #545 (Div. 2)(B. Circus)

    题目链接:http://codeforces.com/contest/1138/problem/B 题目大意:贼绕口的题目,就是给你两个字符串s1,s2,然后每一个人代表一列,第一列代表技能一每个人是 ...

  5. AJAX的来龙去脉(由来)-如何被封装出来的--ajax发送异步请求(四步操作)

    <黑马程序员_超全面的JavaWeb视频教程vedio\JavaWeb视频教程_day23_ajax> \JavaWeb视频教程_day23_ajax\day23ajax_avi\14.打 ...

  6. Windows10安装Ubuntu子系统设置Python3测试环境

    参考链接:https://blog.csdn.net/shanelee73/article/details/80238876

  7. 【转载】双调排序Bitonic Sort,适合并行计算的排序算法

    双调排序是data-independent的排序, 即比较顺序与数据无关的排序方法, 特别适合做并行计算,例如用GPU.fpga来计算. 1.双调序列 在了解双调排序算法之前,我们先来看看什么是双调序 ...

  8. EasyGui的一个小例子

    EasyGui的安装:首先下载easyGui安装包,地址链接:https://pan.baidu.com/s/1D8f_eXWn7l8xhcTuEsqZmA 密码:e5z5 安装步骤: 1.进入eas ...

  9. VMware虚拟机环境配置--网络配置

    Hadoop集群搭建第一篇. 环境: VMware workstation 12, centos 6.5 配置虚拟机网络连接模式为NAT模式(共享主机的ip地址). 桥接模式: 和主机windows是 ...

  10. 引入第三方SDK allowBackup value不一致引起的编译异常

    项目中要引入一个客服的SDK,项目中 <application android:name=".AppApplication" android:allowBackup=&quo ...