官网:Require.js
中文站:Require.js
Require.js 是一款JavaScript 模块加载器。
1、Require.js 要解决的问题
1. 实现js文件的异步加载,减少js加载响应时间。
2. 管理各个模块之间的依赖,方便代码维护。
2、 Require.js 的引入
<script data-main="scripts/main.js" src="scripts/require.js"></script>
其中,data-main是程序的入口。require.js 在加载的时候会检查data-main 属性,你可以在data-main指向的脚本中设置模板加载 选项,然后加载第一个应用模块。同时,为避免引入的require.js阻塞页面,可以使用异步加载。
<script data-main="scripts/main.js" src="scripts/require.js" defer async="true" ></script>
3、 Require.js 配置参数
require.config({
baseUrl: "/scripts",
paths: {
"a": "a",
"b": "b",
}
});
其中,require.config()支持的配置项有:
baseUrl:
所有模块的查找根路径。所以上面的示例中,a.js 和 b.js 都是在scripts目录下。如未显式设置baseUrl,则默认值是加载require.js的HTML所处的位置。如果用了data-main属性,则该路径就变成baseUrl。
paths:
path映射那些不直接放置于baseUrl下的模块名。设置path时起始位置是相对于baseUrl的,除非该path设置以"/"开头或含有URL协议(如http:)。
shim:
为那些没有使用define()来声明依赖关系、设置模块的"浏览器全局变量注入"型脚本做依赖和导出配置。例如:backbone.js、underscore.js 等。
map:
对于给定的模块前缀,使用一个不同的模块ID来加载该模块。该手段对于某些大型项目很重要:如有两类模块需要使用不同版本的"jquery",但它们之间仍需要一定的协同。 在那些基于上下文的多版本实现中很难做到这一点。而且,paths配置仅用于为模块ID设置root paths,而不是为了将一个模块ID映射到另一个。
config:
常常需要将配置信息传给一个模块。这些配置往往是application级别的信息,需要一个手段将它们向下传递给模块。在RequireJS中,基于requirejs.config()的config配置项来实现。要获取这些信息的模块可以加载特殊的依赖“module”,并调用module.config()。
packages:
从CommonJS包(package)中加载模块。
nodeIdCompat:
对于节点来说,模块ID example.js 和 example 是一样的。但是默认情况下,在require.js中这是两个不同的模块ID。所以如果你使用模块管理工具npm来install的话,你需要设置此项为true,来避免解析错误。此项仅适用于处理“.js”后缀不同的问题。
waitSeconds:
在放弃加载一个脚本之前等待的秒数。设为0禁用等待超时。默认为7秒。
context:
命名一个加载上下文。这允许require.js在同一页面上加载模块的多个版本,如果每个顶层require调用都指定了一个唯一的上下文字符串。
deps:
指定要加载的一个依赖数组。当将require设置为一个config object在加载require.js之前使用时很有用。一旦require.js被定义,这些依赖就已加载。使用deps就像调用require([]),但它在loader处理配置完毕之后就立即生效。它并不阻塞其他的require()调用,它仅是指定某些模块作为config块的一部分而异步加载的手段而已。
callback:
在deps加载完毕后执行的函数。当将require设置为一个config object在加载require.js之前使用时很有用,其作为配置的deps数组加载完毕后为require指定的函数。
enforceDefine:
如果设置为true,则当一个脚本不是通过define()定义且不具备可供检查的shim导出字串值时,就会抛出错误。参考在IE中捕获加载错误一节。
xhtml:
如果设置为true,则使用document.createElementNS()去创建script元素。
urlArgs:
RequireJS获取资源时附加在URL后面的额外的query参数。作为浏览器或服务器未正确配置时的“cache bust”手段很有用。