前一篇:JS模块化工具我们以非常简单的方式引入了requirejs://www.Vevb.com/article/82527.htm,这一篇将讲述一下requirejs中的一些基本知识,包括API使用方式等
基本API
require会定义三个变量:define,require,requirejs,其中require === requirejs,一般使用require更简短
define 从名字就可以看出这个api是用来定义一个模块
require 加载依赖模块,并执行加载完后的回调函数
前一篇中的a.js:
define(function(){ function fun1(){ alert("it works"); } fun1();})
通过define函数定义了一个模块,然后再页面中使用:
require(["js/a"]);
来加载该模块(注意require中的依赖是一个数组,即使只有一个依赖,你也必须使用数组来定义),requir API的第二个参数是callback,一个function,是用来处理加载完毕后的逻辑,如:
require(["js/a"],function(){ alert("load finished");})
加载文件
之前的例子中加载模块都是本地js,但是大部分情况下网页需要加载的JS可能来自本地服务器、其他网站或CDN,这样就不能通过这种方式来加载了,我们以加载一个jquery库为例:
require.config({ paths : { "jquery" : ["http://libs.baidu.com/jquery/2.0.3/jquery"] }})require(["jquery","js/a"],function($){ $(function(){ alert("load finished"); })})
这边涉及了require.config,require.config是用来配置模块加载位置,简单点说就是给模块起一个更短更好记的名字,比如将百度的jquery库地址标记为jquery,这样在require时只需要写["jquery"]就可以加载该js,本地的js我们也可以这样配置:
require.config({ paths : { "jquery" : ["http://libs.baidu.com/jquery/2.0.3/jquery"], "a" : "js/a" }})require(["jquery","a"],function($){ $(function(){ alert("load finished"); })})
通过paths的配置会使我们的模块名字更精炼,paths还有一个重要的功能,就是可以配置多个路径,如果远程cdn库没有加载成功,可以加载本地的库,如:
require.config({ paths : { "jquery" : ["http://libs.baidu.com/jquery/2.0.3/jquery", "js/jquery"], "a" : "js/a" }})require(["jquery","a"],function($){ $(function(){ alert("load finished"); })})
这样配置后,当百度的jquery没有加载成功后,会加载本地js目录下的jquery
在使用requirejs时,加载模块时不用写.js后缀的,当然也是不能写后缀
上面例子中的callback函数中发现有$参数,这个就是依赖的jquery模块的输出变量,如果你依赖多个模块,可以依次写入多个参数来使用:
require(["jquery","underscore"],function($, _){ $(function(){ _.each([1,2,3],alert); })})
新闻热点
疑难解答
图片精选