基于Require.js使用方法(总结)


Posted in Javascript onOctober 26, 2017

一、为什么要使用require.js

首先一个页面如果在加载多个js文件的时候,浏览器会停止网页渲染,加载文件越多,网页失去响应的时间就会越长;其次,由于js文件之间存在依赖关系,因此必须严格保证加载顺序,当依赖关系很复杂的时候,代码的编写和维护都会变得困难。

require.js,就是为了解决这两个问题:

1. 实现js文件的异步加载,避免网页失去响应;
2. 管理模块之间的依赖性,便于代码的编写和维护。

二、require.js的加载

第一步,去官网下载最新版本,直接放到页面进行加载

<script src="js/require.js"></script>

加载这个文件可能会导致网页失去响应,可以将它放到页面的底部加载,也可以这样写

<script src="js/require.js" defer async="true" ></script>

async属性表明这个文件需要异步加载,避免网页失去响应。IE不支持这个属性,只支持defer,所以把defer也写上。

加载require.js以后,下一步就要加载我们自己的代码了,也就是入口,可以叫主模块,如果文件名叫main.js,写成下面这样就可以了:

<script src="js/require.js" data-main="js/main"></script>  .js后缀可以省略

三、主模块的写法

如果主模块依赖于jQuery可以这样写

require(['jquery'], function ($){ 
 alert($); 
});

四、require.config()方法

require.config({ 
paths: { 


"jquery": "jquery.min", 


"underscore": "underscore.min", 


"backbone": "backbone.min"

} 
});

上面的代码给出了三个模块的文件名,路径默认与main.js在同一个目录(js子目录)。如果这些模块在其他目录,比如js/lib目录,则有两种写法。

• 一种是逐一指定路径

require.config({ 
paths: { 


"jquery": "lib/jquery.min", 


"underscore": "lib/underscore.min", 


"backbone": "lib/backbone.min"

} 
});

• 另一种则是直接改变基目录(baseUrl)。

require.config({ 
baseUrl: "js/lib", 

paths: { 


"jquery": "jquery.min", 


"underscor: "underscore.min", 


"backbone": "backbone.min" 

} 
});

• 如果某个模块在另一台主机上,也可以直接指定它的网址,比如

require.config({ 
paths: { 


"jquery": "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min"

} 
});

五、AMD模块的写法

require.js加载的模块,采用AMD规范。也就是说,模块必须按照AMD的规定来写。

具体来说,就是模块必须采用特定的define()函数来定义。如果一个模块不依赖其他模块,那么可以直接定义在define()函数之中。

// math.js 
define(function (){ 
var add = function (x,y){ 


return x+y; 

}; 

return { 


add: add 

}; 
});

加载方法如下:

// main.js 
require(['math'], function (math){ 
alert(math.add(1,1)); 
});

如果这个模块还依赖其他模块,那么define()函数的第一个参数,必须是一个数组,指明该模块的依赖性。

define(['myLib'], function(myLib){ 
function foo(){ 


myLib.doSomething(); 

} 

return {  //返回模块中的函数 


foo : foo 

}; 
});

当require()函数加载上面这个模块的时候,就会先加载myLib.js文件。

六、加载非规范的模块(shim的使用方式)

// app.js 
 function sayHello(name){ 
  alert('Hi '+name); 
}
// main.js 
require.config({ 
shim: { 


'app': { //这个键名为要载入的目标文件的文件名,不能随便命名。 



exports: 'sayHello' //exports的值为my.js提供的 对外接口的名称 


} 

} 
}); 
 
require(['app'], function(sayHello) { 
 alert(sayHello()) 
})

导出一个函数,意味着我们得到了一个javaScript类

但是如果在my.js中写了很多function,整合成一个function有点麻烦,想直接导出?方法如下:

// app.js 
function sayHi(name){ 
 alert('Hi '+name); 
} 
function sayHello(name){ 
 alert('Hiello '+name); 
}
// main.js 
require.config({ 


shim: { 



app: { 




init: function() { //这里使用init将2个接口返回 





return { 






sayHi: sayHi, 






sayHello: sayHello 





} 




} 



} 


} 

}); 
 

require(['app'], function(a) { 


a.sayHi('zhangsan'); 


a.sayHello('lisi'); 

});

shim的有序导入

require.config({ 
 
 shim: { 
  'jquery.ui.core': ['jquery'], //表示在jquery导入之后导入 
 
 'jquery.ui.widget': ['jquery'], 
 
 'jquery.ui.mouse': ['jquery'], 
 
 'jquery.ui.slider':['jquery'] 
   }, 
 paths : {  
  jquery : 'jquery-2.1.1/jquery',  
  domReady : 'require-2.1.11/domReady',  
  'jquery.ui.core' : 'jquery-ui-1.10.4/development-bundle/ui/jquery.ui.core',  
  'jquery.ui.widget' : 'jquery-ui-1.10.4/development-bundle/ui/jquery.ui.widget',  
  'jquery.ui.mouse' : 'jquery-ui-1.10.4/development-bundle/ui/jquery.ui.mouse',  
  'jquery.ui.slider' : 'jquery-ui-1.10.4/development-bundle/ui/jquery.ui.slider' 
  } 

});  
 

require(['jquery', 'domReady','jquery.ui.core','jquery.ui.widget','jquery.ui.mouse','jquery.ui.slider'], function($) {    
 
$("#slider" ).slider({    
 
 value:0,   
 
 min: 0,   
  
max: 4,   
  
step: 1,   
  
slide: function( event, ui ) {}  
  
 });  

 });

以上这篇基于Require.js使用方法(总结)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery 清空file域示例(兼容个浏览器)
Oct 11 Javascript
JavaScript数组函数unshift、shift、pop、push使用实例
Aug 27 Javascript
jQuery中click事件的定义和用法
Dec 20 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
Apr 17 Javascript
简述JavaScript中正则表达式的使用方法
Jun 15 Javascript
JS实现的仿东京商城菜单、仿Win右键菜单及仿淘宝TAB特效合集
Sep 28 Javascript
p5.js实现斐波那契螺旋的示例代码
Mar 22 Javascript
angular将html代码输出为内容的实例
Sep 30 Javascript
详解Vue底部导航栏组件
May 02 Javascript
Vue源码分析之Vue实例初始化详解
Aug 25 Javascript
使用Node.js实现base64和png文件相互转换的方法
Mar 11 Javascript
vue插槽slot的简单理解与用法实例分析
Mar 14 Javascript
原生javascript实现文件异步上传的实例讲解
Oct 26 #Javascript
详解开源的JavaScript插件化框架MinimaJS
Oct 26 #Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
Oct 25 #Javascript
js插件实现图片滑动验证码
Sep 29 #Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
Oct 25 #Javascript
详解JSONObject和JSONArray区别及基本用法
Oct 25 #Javascript
详解HTML5 使用video标签实现选择摄像头功能
Oct 25 #Javascript
You might like
PHP将整个网站生成HTML纯静态网页的方法总结
2012/02/05 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
js版本A*寻路算法
2006/12/22 Javascript
js完美的div拖拽实例代码
2014/01/22 Javascript
javascript实现playfair和hill密码算法
2014/12/07 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
2017/01/19 Javascript
基于node下的http小爬虫的示例代码
2018/01/11 Javascript
axios向后台传递数组作为参数的方法
2018/08/11 Javascript
浅谈Webpack核心模块tapable解析
2018/09/11 Javascript
微信小程序 轮播图实现原理及优化详解
2019/09/29 Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
2020/06/15 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
2020/11/06 Javascript
[01:10:58]KG vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
浅析AST抽象语法树及Python代码实现
2016/06/06 Python
python验证码识别的示例代码
2017/09/21 Python
python进行文件对比的方法
2018/12/24 Python
用Cython加速Python到“起飞”(推荐)
2019/08/01 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
2019/10/27 Python
Python爬虫入门有哪些基础知识点
2020/06/02 Python
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
学生会主席竞聘书
2014/03/31 职场文书
英语教师求职信
2014/06/16 职场文书
企业党建工作汇报材料
2014/08/19 职场文书
村安全生产责任书
2014/08/25 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
党员批评与自我批评发言材料
2014/10/14 职场文书
公司租房协议书
2014/10/14 职场文书
2014年生活老师工作总结
2014/12/23 职场文书
白鹤梁导游词
2015/02/06 职场文书
务工证明怎么写
2015/06/18 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
Python pandas求方差和标准差的方法实例
2021/08/04 Python
quickjs 封装 JavaScript 沙箱详情
2021/11/02 Javascript