zoukankan      html  css  js  c++  java
  • CommonJs、AMD、CMD模块化规范

        /**
         * 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;
        }));
  • 相关阅读:
    Java 包装类的自动封箱与拆箱
    Java 基本类型的包装类
    Java日期时间练习三(闰年)
    导入包与模块
    模块_os模块
    Re模块练习题
    Re模块的方法补充
    Re模块的 三个方法
    基础纹理
    ruby 的数组操作
  • 原文地址:https://www.cnblogs.com/leyi/p/6534647.html
Copyright © 2011-2022 走看看