/*** 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;}));
转载于:https://www.cnblogs.com/leyi/p/6534647.html