Raindan 2013-01-23
简介:
Requrejs遵循AMD规范,可以解决前端JS依赖问题,对于富客户端开发是不可少的。
使用:
在HTML文件中放入如下的标签,这里会载入require.js源码,并且执行scripts/main.js的内容。
这里main.js所在的目录将被定义问root directory, 以后的依赖定义都可以相对于这个目录。
<script data-main="scripts/main" src="scripts/require.js"></script>
main.js中写入如下内容:
require(['jquery', 'canvas', 'app/sub'],
function ($, canvas, sub) {
//jQuery, canvas and the app/sub module are all
//loaded and can be used here now.
});这里会查找scripts/jquery.js, script/canvas.js, scritps/app/sub.js,并将返回值作为参数。
注意,这里就要求这三个js是返回了正确的对象,例如jquery.js应该访问一个jQuery的对象,简单说就是它们需要遵守AMD规范。
jQuery是遵守AMD规范的,下面是这方面的定义,对于没有遵循的库可以稍微DIY,让其返回正确值。
这里是jQuery关于AMD的定义。
if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
define( "jquery", [], function () { return jQuery; } );
}
怎么让js遵循AMD?
如果这个js没有依赖其他js文件,那么就可以直接在闭包最后返回一个该js的“功能对象”。
如果依赖其他文件,那么就需要类似这样写:
define(["./cart", "./inventory"], function(cart, inventory) {
//return an object to define the "my/shirt" module.
return {
color: "blue",
size: "large",
addToCart: function() {
inventory.decrement(this);
cart.add(this);
}
}
}
);["./cart", "./inventory"]是该文件的依赖,"."开始表示相对于当前文件,而不是相对于root directory。返回的值的方式很灵活,可以像jquery那样返回封装好的对象,也可以直接用json封装。
更多配置实用见官网,可以指定一些路径缩写,例如这个application要获取一些public 的lib,我们可以把这个lib的路径配置上。例如,在main.js中添加
requirejs.config({
//By default load any module IDs from js/lib
baseUrl: 'js/lib',
//except, if the module ID starts with "app",
//load it from the js/app directory. paths
//config is relative to the baseUrl, and
//never includes a ".js" extension since
//the paths config could be for a directory.
paths: {
app: '../app'
}
});