这是我参与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
}))