现在官网上下载require.js,
1 . 在body底部加载<script src="js/require.js" defer sync="true"></script>
2 . 在加载页面的入口js<script src="js/main.js" data-main= "js/main"></script>
3 . main.js的写法,如果main.js不依赖其他模块,直接在main.js文件里写代码;
4 . 如果main.js依赖其他模块,在main.js的顶部,require( [' jquery '] , function($){
} ) ; jquery.js函数需在和main.js相同的目录文件下
require接受两个参数,第一个参数是一个数组,是该模块依赖的模块,第二个参数是回调函数,当依赖的模块加载完成后,以参数的形式参入回调函数中,供该模块使用
6 . require引入模块的用法:
6.1 直接( jquery.js | underscore.js | backbone.js 和main.js在同一个目录文件下 )
require( [ ' jquery' , 'underscore' , ' backbone ' ] , function( $ , _ , Backbone ) {
//some code
})
6.2 在模块的顶部配置require的配置项来指定依赖模块的位置: paths属性指定各个依赖模块的路径 (和main.js在项目的目录下)
require.config({
paths: {
"jquery": "jquery.min",
"underscore": "underscore.min",
"backbone": "backbone.min"
}
});
(和main.js在不同的目录下 js/lis) 不用加.js
require.config({
paths: {
"jquery": "lis/jquery.min",
"underscore": "lis/underscore.min",
"backbone": "lis/backbone.min"
}
});
或是
require.config({
baseUrl : " js/lis ",
paths: {
"jquery": "jquery.min",
"underscore": "underscore.min",
"backbone": "backbone.min"
}
});
6.3 如果另外的模块在另外的主机上,
require.config({
paths: {
"jquery": "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min",
});
7 . require.js要求每个模块都是独立的文件,如果加载的模块较多,会发出多次http请求,影响网页速度,因此require.js提供了优化工具,当模块部署完毕后,可以用这个工具将多个模块合并在一个文件中,减少http请求
8.require.js加载的模块,符合ADM规范 ,因此模块需按照ADM标准来写 ,模块必须采用特定的define()函数来定义,
8.1 如果一个模块不依赖其他模块,则直接写在define()函数之中,
define(function(){
var add = function (x,y){
return x+y;
};
return {
add: add
};
});
8.2 模块要依赖其他模块 ,define()函数的第一个参数必须是一个数组,指明该模块的依赖性 ,当require()函数加载下面这个模块的时候,就会先加载myLib.js文件。
define(['myLib'], function(myLib){
function foo(){
myLib.doSomething();
}
return {
foo : foo
};
});
9 . 加载非规范模块: (jquery符合AMD规范) ,加载非规范模块时,要在加载之前要定义它们的特征,
require.config({
shim: {
'underscore':{
exports: '_'
},
'backbone': {
deps: ['underscore', 'jquery'],
exports: 'Backbone'
}
}
});
require.config()接受一个配置对象,这个对象除了有前面说过的paths属性之外,还有一个shim属性,专门用来配置不兼容的模块。具体来说,每个模块要定义(1)exports值(输出的变量名),表明这个模块外部调用时的名称;(2)deps数组,表明该模块的依赖性。
例如jquery的插件可以这样定义
require.config({
shim: {
'jquery.scroll': {
deps: [ 'jquery'],
exports: 'jQuery.fn.scroll'
}
}
});
10 . require的其他插件
domready插件,可以让回调函数在页面DOM结构加载完成后再运行,
require(['domready!'], function (doc){
// called once the DOM is ready
});
text和image插件,则是允许require.js加载文本和图片文件。
define([
'text!review.txt',
'image!cat.jpg'
],
function(review,cat){
console.log(review);
document.body.appendChild(cat);
}
);