基于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 相关文章推荐
JavaScript高级程序设计(第3版)学习笔记 概述
Oct 11 Javascript
图片上传插件jquery.uploadify详解
Nov 15 Javascript
JavaScript中实现sprintf、printf函数
Jan 27 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
Apr 01 Javascript
判断输入的字符串是否是日期格式的简单方法
Jul 11 Javascript
微信小程序 页面跳转如何实现传值
Apr 05 Javascript
微信小程序访问node.js接口服务器搭建教程
Apr 25 Javascript
echarts实现词云自定义形状的示例代码
Feb 20 Javascript
JavaScript中的一些实用小技巧总结
Apr 07 Javascript
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
Sep 05 Javascript
微信小程序之 catalog 切换实现解析
Sep 12 Javascript
原生js+css实现tab切换功能
Sep 17 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
Sublime里直接运行PHP配置方法
2014/11/28 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
利用PHP获取汉字首字母并且分组排序详解
2017/10/22 PHP
Laravel 模型关联基础教程详解
2019/09/17 PHP
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
2015/12/30 Javascript
js实现常用排序算法
2016/08/09 Javascript
AngularJs  Using $location详解及示例代码
2016/09/02 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
利用JS测试目标网站的打开响应速度
2017/12/01 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
JS面试题中深拷贝的实现讲解
2020/05/07 Javascript
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
在Django的视图中使用数据库查询的方法
2015/07/16 Python
Python时间戳使用和相互转换详解
2017/12/11 Python
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
python实现图片批量压缩程序
2018/07/23 Python
浅谈tensorflow中几个随机函数的用法
2018/07/27 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
python实现中文文本分句的例子
2019/07/15 Python
django中使用POST方法获取POST数据
2019/08/20 Python
浅谈tensorflow之内存暴涨问题
2020/02/05 Python
python实现人像动漫化的示例代码
2020/05/17 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
CSS3实现滚动条动画效果代码分享
2016/08/03 HTML / CSS
优秀团员个人事迹材料
2014/01/29 职场文书
计算机专业毕业生求职信
2014/04/30 职场文书
结对共建工作方案
2014/06/02 职场文书
会计学习心得体会
2014/09/09 职场文书
个人查摆问题整改措施
2014/10/04 职场文书
工程承包协议书
2014/10/20 职场文书
鲁冰花观后感
2015/06/10 职场文书
教你win10系统中APPCRASH事件问题解决方法
2022/07/15 数码科技