基于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 相关文章推荐
document.all还是document.getElementsByName?
Jul 21 Javascript
腾讯的ip接口 方便获取当前用户的ip地理位置
Nov 25 Javascript
jquery easyui 结合jsp简单展现table数据示例
Apr 18 Javascript
Jquery的each里用return true或false代替break或continue
May 21 Javascript
jQuery实现高亮显示的方法
Mar 10 Javascript
在浏览器中打开或关闭JavaScript的方法
Jun 03 Javascript
微信web端后退强制刷新功能的实现代码
Mar 04 Javascript
vue实现商品加减计算总价的实例代码
Aug 12 Javascript
小程序清理本地缓存的方法
Aug 17 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
Nov 08 Javascript
详解使用Nuxt.js快速搭建服务端渲染(SSR)应用
Mar 13 Javascript
vue路由的配置和页面切换详解
Sep 09 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中利用substr_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
JavaScript 上万关键字瞬间匹配实现代码
2013/07/07 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
2014/12/16 Javascript
jQuery实现复选框成对选择及对应取消的方法
2015/03/03 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
nodejs基础知识
2017/02/03 NodeJs
纯JS实现弹性导航条效果
2017/03/06 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
详解vue模拟加载更多功能(数据追加)
2017/06/23 Javascript
详解vue-cli + webpack 多页面实例配置优化方法
2017/07/13 Javascript
解决vue-router中的query动态传参问题
2018/03/20 Javascript
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
vuejs简单验证码功能完整示例
2019/01/08 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
2020/02/11 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
JavaScript中变量提升和函数提升的详解
2020/08/07 Javascript
[53:13]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-GAMING
2014/05/22 DOTA
谈谈python中GUI的选择
2018/03/01 Python
使用11行Python代码盗取了室友的U盘内容
2018/10/23 Python
django迁移数据库错误问题解决
2019/07/29 Python
Python编程快速上手——Excel表格创建乘法表案例分析
2020/02/28 Python
Yankee Candle官网:美国最畅销蜡烛品牌之一
2020/01/05 全球购物
竞选大学学委演讲稿
2014/09/13 职场文书
党员四风问题对照检查材料思想汇报
2014/09/16 职场文书
出国签证在职证明
2014/09/20 职场文书
国家税务局领导班子对照检查材料思想汇报
2014/10/04 职场文书
2014年除四害工作总结
2014/12/06 职场文书
2015年清剿火患专项行动工作总结
2015/07/27 职场文书