基于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 call和apply区别及使用方法
Nov 14 Javascript
jquery获取节点名称
Apr 26 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
Nov 20 Javascript
jQuery表格插件datatables用法详解
Nov 23 Javascript
js判断输入字符串是否为空、空格、null的方法总结
Jun 14 Javascript
JavaScript中闭包的写法和作用详解
Jun 29 Javascript
关于Javascript回调函数的一个妙用
Aug 29 Javascript
Node.js用readline模块实现输入输出
Dec 16 Javascript
jQuery获取选中单选按钮radio的值
Dec 27 Javascript
详解Angular 4.x Injector
May 04 Javascript
纯js实现隔行变色效果
Nov 29 Javascript
vue2路由基本用法实例分析
Mar 06 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连接Oracle数据库
2006/10/09 PHP
将时间以距今多久的形式表示,PHP,js双版本
2012/09/25 PHP
PHP实现邮件群发的源码
2013/06/18 PHP
一个漂亮的php验证码类(分享)
2013/08/06 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
ExtJS PropertyGrid中使用Combobox选择值问题
2010/06/13 Javascript
实测jquery data()如何存值
2013/08/18 Javascript
js实现精确到秒的日期选择器完整实例
2016/04/30 Javascript
浅谈javascript中遇到的字符串对象处理
2016/11/18 Javascript
JavaScript基本类型值-Number类型
2017/02/24 Javascript
JS实现浏览器打印、打印预览示例
2017/02/28 Javascript
NodeJs测试框架Mocha的安装与使用
2017/03/28 NodeJs
vue-axios使用详解
2017/05/10 Javascript
基于Node的React图片上传组件实现实例代码
2017/05/10 Javascript
vue.js整合mint-ui里的轮播图实例代码
2017/12/27 Javascript
JavaScript创建防篡改对象的方法分析
2018/12/30 Javascript
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
fastadmin中调用js的方法
2019/05/14 Javascript
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
Windows下Python2与Python3两个版本共存的方法详解
2017/02/12 Python
python多线程同步实例教程
2019/08/11 Python
更新升级python和pip版本后不生效的问题解决
2020/04/17 Python
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
Auguste The Label官网:澳大利亚一家精品女装时尚品牌
2020/06/14 全球购物
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
写演讲稿所需要注意的4个条件
2014/01/09 职场文书
初三学生评语大全
2014/04/24 职场文书
2015年见习期工作总结
2014/12/12 职场文书
2015年小学美术工作总结
2015/05/25 职场文书
导游词之吉林花园山
2019/10/17 职场文书
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python
用Python创建简易网站图文教程
2021/06/11 Python
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server