微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

第二次聊一聊JS require.js模块化工具的基础知识

前一篇:JS模块化工具我们以非常简单的方式引入了requirejs:,这一篇将讲述一下requirejs中的一些基本知识,包括API使用方式等

基本API

require会定义三个变量:define,require,requirejs,其中require === requirejs,一般使用require更简短

define 从名字就可以看出这个api是用来定义一个模块 require 加载依赖模块,并执行加载完后的回调函数 前一篇中的a.js:

rush:js;"> define(function(){ function fun1(){ alert("it works"); } fun1(); })

通过define函数定义了一个模块,然后再页面中使用:

require(["js/a"]); 来加载该模块(注意require中的依赖是一个数组,即使只有一个依赖,你也必须使用数组来定义),requir API的第二个参数是callback,一个function,是用来处理加载完毕后的逻辑,如:

rush:js;"> require(["js/a"],function(){ alert("load finished"); })

加载文件

之前的例子中加载模块都是本地js,但是大部分情况下网页需要加载的JS可能来自本地服务器、其他网站或CDN,这样就不能通过这种方式来加载了,我们以加载一个jquery库为例:

rush:js;"> 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我们也可以这样配置:

rush: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库没有加载成功,可以加载本地的库,如:

rush:js;"> require.config({ paths : { "jquery" : ["http://libs.baidu.com/jquery/2.0.3/jquery","js/jquery"],function($){ $(function(){ alert("load finished"); }) })

这样配置后,当百度的jquery没有加载成功后,会加载本地js目录下的jquery

在使用requirejs时,加载模块时不用写.js后缀的,当然也是不能写后缀 上面例子中的callback函数中发现有$参数,这个就是依赖的jquery模块的输出变量,如果你依赖多个模块,可以依次写入多个参数来使用:

rush:js;"> require(["jquery","underscore"],function($,_){ $(function(){ _.each([1,2,3],alert); }) })

如果某个模块不输出变量值,则没有,所以尽量将输出的模块写在前面,防止位置错乱引发误解

全局配置

上面的例子中重复出现了require.config配置,如果每个页面中都加入配置,必然显得十分不雅,requirejs提供了一种叫"主数据"的功能,我们首先创建一个main.js:

rush:js;"> require.config({ paths : { "jquery" : ["http://libs.baidu.com/jquery/2.0.3/jquery","a" : "js/a" } })

然后再页面中使用下面的方式来使用requirejs:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐