【问】AMD模块化方案require.js是什么?
【答】
1. require.js为什么出现
(1)实现js文件的异步加载,避免网页失去响应;
(2)管理模块之间的依赖性,便于代码的编写和维护。
2. require.js用法
(1)引入requre.js
// 1. data-main属性的作用是,指定网页程序的主模块。在上例中,就是js目录下面的main.js,这个文件会第一个被require.js加载。由于require.js默认的文件后缀名是js,所以可以把main.js简写成main。
// 2. async属性表明这个文件需要异步加载,避免网页失去响应。IE不支持这个属性,只支持defer,所以把defer也写上。
<script src="js/require.js" data-main="js/main" defer async="true"></script>
(2)定义和使用 模块
//main.js require.js的全局配置
require.config({
baseUrl: '../../', //基础路径
paths: {
jquery : '../vendor/jquery/jquery', //相当于../../../vendor/jquery/jquery
underscore : '../vendor/underscore/underscore',
backbone : '../vendor/backbone/backbone',
},
shim: { //非按照AMD规范定义的库,这样兼容
underscore: {
exports: '_'
},
backbone: {
deps: [
'underscore',
'jquery'
],
exports: 'Backbone'
},
}
});
//a.js 模块定义
// 语法:define([id,deps,] callback);
define(['jquery', './utils'], //utils是以路径的方式引入的
function ($) { //注意!!!若该模块无返回值,形参中可不写,如一些模块是挂在window上的,如很多工具方法
$(function () {
alert($);
});
},
function (err) {
//异常
}
)
//c.js 模块使用
//语法:require(deps[,callback]);
require(['index']);