CMD、AMD、CommonJS

清晖
JS模块化开发的标准

1. AMD
`

 //a.js
 define(function(){
    console.log('执行a.js');
    return{
        name: function(){
            console.log('My name is A');
        }
    }
 });

`

`
    //b.js
    define(function(){
        console.log('执行b.js');
        return {
            name: function(){
                console.log('My name is B');
            }
        }
    })
`

`
    //main.js
    define(['a','b'],  // 输出'执行a.js' '执行b.js'
    function(){
        console.log('执行main.js'); // 输出 '执行main.js'
        a.name(); // 输出 'My name is A'
        $('#b').click(function(){
            b.name();  // 输出 'My name is B'
        })
    });
`


2. CMD

`
 //a.js
 define(function(){
    console.log('执行a.js');
    return{
        name: function(){
            console.log('My name is A');
        }
    }
 });

`

`
    //b.js
    define(function(){
        console.log('执行b.js');
        return {
            name: function(){
                console.log('My name is B');
            }
        }
    })
`

`
    //main.js
    define(function(){
        console.log('执行main.js'); // 输出 '执行main.js'
        var a = require('a'); 
        a.name(); // 输出 '执行a.js' 'My name is A'
        $('#b').click(function(){
            var b = require('b');
            b.name(); // 输出 '执行b.js' 'My name is B'
        })
    });
`




3. CommonJS

`
    // a.js
    var name = 'My name is A'
    moduel.exportds = {name}
`
`
    // main.js
    var aModuel = require('路径/a.js');]
    var name = aModuel.name
    console.log(name)  // 输出:'My name is A'
`



对比
CMD: 在需要的地方才引入(后置依赖)。遍历入口文件内容,找到require字段,加载依赖模块,但并不执行。执行到需要的代码时,才执行依赖模块,为了防止出错,必须同步执行完依赖模块再执行主模块内容。
执行文件顺序是可控的,执行等待时间会累加

AMD: 在执行入口文件正式内容前,加载并执行依赖模块(依赖前置)。主模块内容置于回调函数中,即加载执行完依赖模块再回调执行主模块。
依赖模块的加载顺序不确定
CommonJS: 模块加载的顺序,按照其在代码中出现的顺序,同步加载
代表
CommonsJS: nodeJs, 服务端规范  
AMD: RequireJs, 浏览器端规范
CMD: SeaJS, 浏览器端规范
阅读 800

清晖素衫
落花无言,愿人淡如菊,心素如简

认识生活的真相后仍然热爱生活,是真正的英雄

87 声望
2 粉丝
0 条评论

认识生活的真相后仍然热爱生活,是真正的英雄

87 声望
2 粉丝
文章目录
宣传栏