requirejs处理前端JS依赖

简介:

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'
    }
});

相关推荐