common.js AMD CMD规范

408 阅读2分钟

这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战

1、AMD:

Require.js,一个强大的工具包,它能够自动的把混乱的前端脚本加载的规整而有序,Require.js主要用于客户端的模块管理,和其他js库类似,首先你需要引入,如下:

data-main:指定主代码所在的脚本文件,对应JS目录下的main.js,requireJs在读取本地JS文件时,可以省略.js后缀,如果是第三方JS,则需要.js后缀,async="true" defer=“defer" 主要是屏蔽浏览器的差异,延迟加载脚本

require.js 主要提供define和require两个方法来进行模块化编程,前者来定义模块,后者用来调用模块,这种模块定义的方法不会污染全局环境,能够清晰的显示依赖关系。

require方法本身也是一个对象,可以使用自带的config方法,进行模块的运行参数配置,config接收任意对象作为参数,如下:

require.config({

    baseUrl : “/“ //配置文件的访问路径

    paths :{

    “jquery”: “js/jquery-1.90"

    }
});

对jquery的调用也较为方便,使用require方法,传入2个参数,模块名以及回调函数,如下:

require( [‘jquery’,function($){

        // you jquery code

        $(‘#id’).click(function(){});

        }]);

        //   文件名: foo.js

        define([‘jquery'],function($){

          //方法

        function myFunc(){};

        //   暴露公共方法

        return myFunc;

        });

        //复杂点的例子

        //文件名:foo.js 

        define([‘jquery’,’underscore'],function($, _){
        //  方法

        function a(){}; //私有方法,因为没有被返回

        function b(){};  //公共方法,因为被返回了

        function c(){}; //公共方法,因为被返回了

        //  暴露公共方法

        return {

        b: b,

        c: c

        }

});

2、common Js  通用JS模块化规范-适用于server端 //一个模块对应一个文件

eg:

//    文件名:foo.js

//  依赖

var $ = require(‘jquery’);

// 方法

function myFunc(){};

//暴露公共方法(一个)

module.exports = myFunc;

//复杂例子

//    文件名 foo.js

var $ = require(‘jquery’);

var _ = require(‘underscore’);

// methods

function a(){}; //私有方法 因为没有在下面公共方法里面暴露出来

function b(){};

function c(){};

//暴露公共方法

module.exports = {

b: b,

c: c

}

3、UMD(通用模块规范) 兼容AMD和CommonJs,同时还支持老式的”全局”变量规范

( function (root, factory){

if( typeof define === ‘function’ && define.amd){

//AMD

define([‘jquery’],factory);

}else if( typeof exports == ‘object' ){

//Node、CommonJs之类的

mode.exports = factory(require(‘query'));

}else{

//浏览器全局变量( root 即window)

root.returnExports = factory(root.jQuery);

}

}(this,function($){

//方法 

function myFunc(){};

//暴露公共方法

return myFunc;s

}))