一:什么是require.js

①:require.js是一个js脚本加载器,它遵循AMD(Asynchronous Module Definition)规范,实现js脚本的异步加载,不阻塞页面的渲染和其后的脚本的执行,并提供了在加载完成之后的执行相应回调函数的功能;
②:require.js要求js脚本必须要实现模块化,即文件化;而require.js的作用之一就是加载js模块,也就是js文件。
③:require.js可以管理js模块/文件之间的依赖;即不同的框架例如Jquery,AngularJs等采用了不同的语法,而使用这些语法的js文件在导入时必须排在Jquery.js或Angular.js之后才能顺利执行,require.js则能够解决排序依赖问题。
二:为什么要使用require.js
①:加载的时候,浏览器会停止网页渲染,原因如下:
在不使用require.js时,文件编写方式如下:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="a.js"></script>
</head>
<body>
<span>Hellow World</span>
</body>
</html>
在导入的a.js文件中:
(function(){
function fun1(){
alert("JS文件已生效");
}
fun1();
})()
在运行以上代码时我们可以注意到在alert弹出的提示框出现的时候,网页html的部分仍然是空白的,没有显示出任何内容,当我们点击确定之后"Hellow World"才会显示在网页中,这就是JS阻塞浏览器渲染导致的结果。加载文件越多,网页失去响应的时间就会越长。
②:由于js文件之间存在依赖关系,因此必须严格保证加载顺序,依赖性最大的模块一定要放到最后加载,当依赖关系很复杂的时候,代码的编写和维护都会变得困难。例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript" src="js/jquery-1.10.2.js" ></script>
<script type="text/javascript" src="js/b.js" ></script>
</head>
<body>
<div id="div1" style="width: 100px;height: 100px;background-color: red;"></div>
</body>
</html>
在b.js文件中
$(function(){
$("#div1").css("background-color","blue");
})
为了使b.js中的代码生效,必须要把<script type="text/javascript" src="js/b.js" ></script>这行代码放到<script type="text/javascript" src="js/jquery-1.10.2.js" ></script>后面,这样在使用的框架和js文件较多的时候,它们的导入顺序就会变得很麻烦。
require.js的诞生就是为了解决上面所说的两个问题:
1.实现js文件的异步加载,避免网页失去响应;
2.管理模块之间的依赖性,便于代码的编写和维护。
三:require.js的加载
①:首先,我们要去官网下载最新的版本,官方网址:http://requirejs.org/docs/download.html
下载完成后,将它放在网站项目的js子文件夹下就可以使用了:
<script src="js/require.js"></script>
这里可能会遇到一个问题:加载这个文件,也可能造成网页失去响应,这个问题的解决办法有两种:
1.将这行代码写成如下格式:
<script src="js/require.js" defer async="true" ></script>
其中:async属性和defer属性表明这个文件需要异步加载,避免网页失去响应。IE只支持defer属性,而不支持async属性。
2.将文件放到网页底部加载。
②:加载完require.js之后,我们就可以加载自己的代码了,假设我们自己的js文件命名为main.js,同样放于js文件夹下,那么,只需要执行如下代码:
<script src="js/require.js" data-main="js/main"></script>
上述代码中,data-main属性的作用是指定网页程序的主模块。即js目录下面的main.js,这个文件会第一个被require.js加载。由于require.js默认的文件后缀名是js,所以可以省略掉".js"简写成main。
四:基本API
在上一部分中,我们引入了main.js文件,main.js的写法:
define(function(){
function fun1(){
alert("main.js已生效");
}
fun1();
})
这样,我们就通过define函数定义了一个模块,然后在页面中通过AMD规范定义的的require()函数使用:
require(["js/main"]);
一般情况下,它会依赖于其他的js框架,比如jquery等等,那么,我们这时就要在页面文件中。我们需要按照以下格式来写:
require(['A', 'B', 'C'], function (A, B, C){
// js代码
});
require()函数接受两个参数。第一个参数是一个数组,表示所依赖的框架,上例就是['A', 'B', 'C'],即main.js里的代码需要用到这三个模块;第二个参数是一个回调函数,当前面指定的模块都加载成功后,它将被调用。加载的模块会以参数形式传入该函数,从而在回调函数内部就可以使用这些模块。
require()会异步加载A,B,C三个模块,浏览器不会失去响应;它指定的回调函数,只有前面的模块都加载成功后,才会运行,解决了依赖性的问题。
下面。我们就以jquery为例,说明这个函数是怎样运行的:
require(['jquery'], function ($){
// jquery代码
});
require.js会先加载jQuery,然后再运行回调函数。main.js的代码就写在回调函数中。注意:require中的依赖是一个数组,即使只有一个依赖,你也必须使用数组来定义。
五:加载文件
在上一部分中,main.js的依赖模块是['jquery']。默认情况下,require.js会假定这个模块与main.js在同一个目录,文件名是 jquery.js,然后自动加载,除此之外,我们可以通过require.config()方法,我们可以对模块的加载行为进行自定义,require.config()就写在main.js的头部,它的参数是一个对象,这个对象的paths属性指定各个模块的加载路径。
require.config({
paths: {
"jquery": "jquery.min",
"anjular": "anjular.min"
}
});
上述模块路径默认与main.js在同一个目录(js子目录)。如果这些模块在其他目录,比如js/lib目录,则有两种写法。一种是逐一指定路径:
require.config({
paths: {
"jquery": "lib/jquery.min",
"anjular": "lib/anjular.min"
}
});
另一种则是直接改变根目录(baseUrl):
require.config({
baseUrl: "js/lib",
paths: {
"jquery": "jquery.min",
"anjular": "anjular.min"
}
});
之前的例子中加载模块都是本地js,但是大部分情况下网页需要加载的JS可能来自本地服务器、其他网站或CDN,这样就不能通过这种方式来加载了,我们以加载一个jquery库为例:
require.config({
paths : {
"jquery" : ["http://libs.baidu.com/jquery/2.0.3/jquery"]
}
})
上面的例子中重复出现了require.config配置,如果每个页面中都加入配置,必然会十分麻烦,requirejs提供了一种叫"主数据"的功能,我们可以将所有的require.config配置放到main.js中,在页面中调用它,
<script data-main="js/main" src="js/require.js"></script>
就可以使每一个页面都使用这个配置,然后页面中就可以直接使用require来加载所有的短模块名。
六:AMD模块的写法
require.js加载的模块,采用AMD规范,也就是说,模块必须按照AMD的规定来写。具体来说,就是模块必须采用特定的define()函数来定义。如果一个模块不依赖其他模块,那么可以直接定义在define()函数之中。假定现在有一个math.js文件,它定义了一个math模块。那么,math.js就要这样写:
define(function (){
var add = function (x,y){
return x+y;
};
return {
add: add
};
});
然后在页面中:
require(['math'], function (math){
alert(math.add(1,1));
});
如果这个js文件还依赖其他模块,那么define()函数的第一个参数,必须是一个数组,指明该模块的依赖性。
define(['jquery'], function($){
$("#div1").css("background-color","red");
})
当require()函数加载上面这个模块的时候,就会先加载jquery.js文件。
七:第三方模块
通过require加载的模块一般都需要符合AMD规范即使用define来申明模块,但是部分时候需要加载非AMD规范的js,这时候就需要用到另一个功能:shim:
1. 非AMD模块输出,将非标准的AMD模块变成可用的模块,例如:在老版本的jquery中,是没有继承AMD规范的,所以不能直接require["jquery"],这时候就需要shim
require.config({
shim: {
"jquery" : {exports : "$"}
}
})
这样配置后,我们就可以在其他模块中引用jquery模块:
require(["jquery"], function(_){
$("#div1").css("background-color","red");
})
2.插件形式的非AMD模块,我们经常会用到jquery插件,而且这些插件基本都不符合AMD规范,比如jquery.form插件,这时候就需要将form插件加入到jquery中:
require.config({
shim: {
"jquery.form" : {
deps : ["jquery"]
}
}
})
require.config(["jquery", "jquery.form"], function($){
$(function(){
$("#form").ajaxSubmit({...});
})
})
以上就是require的基本用法详解。希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# require.js
# 用法
# Javascript模块化编程(三)require.js的用法及功能介绍
# 第二次聊一聊JS require.js模块化工具的基础知识
# 详解require.js配置路径的用法和css的引入
# 关于RequireJS的简单介绍即使用方法
# require.js 加载过程与使用方法介绍
# require.js使用方法的简单代码讲解笔记
# 加载
# 是一个
# 回调
# 我们可以
# 就可以
# 第一个
# 自己的
# 就会
# 才会
# 这时候
# 可以直接
# 为例
# 在上
# 写在
# 会先
# 来写
# 这行
# 都是
# 情况下
# 放在
相关文章:
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
如何快速搭建FTP站点实现文件共享?
如何在万网ECS上快速搭建专属网站?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
如何在宝塔面板中创建新站点?
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
建站之星如何保障用户数据免受黑客入侵?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
建站主机是什么?如何选择适合的建站主机?
PHP 500报错的快速解决方法
建站之星微信建站一键生成小程序+多端营销系统
大型企业网站制作流程,做网站需要注册公司吗?
一键网站制作软件,义乌购一件代发流程?
如何通过PHP快速构建高效问答网站功能?
C++如何使用std::optional?(处理可选值)
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
如何将凡科建站内容保存为本地文件?
常州企业网站制作公司,全国继续教育网怎么登录?
如何选择高性价比服务器搭建个人网站?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
宁波自助建站系统如何快速打造专业企业网站?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
建站之星如何快速生成多端适配网站?
外贸公司网站制作,外贸网站建设一般有哪些步骤?
浅析上传头像示例及其注意事项
如何在阿里云ECS服务器部署织梦CMS网站?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
如何用搬瓦工VPS快速搭建个人网站?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
如何在西部数码注册域名并快速搭建网站?
如何快速登录WAP自助建站平台?
IOS倒计时设置UIButton标题title的抖动问题
再谈Python中的字符串与字符编码(推荐)
大学网站设计制作软件有哪些,如何将网站制作成自己app?
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
如何访问已购建站主机并解决登录问题?
如何做静态网页,sublimetext3.0制作静态网页?
b2c电商网站制作流程,b2c水平综合的电商平台?
,购物网站怎么盈利呢?
,交易猫的商品怎么发布到网站上去?
潮流网站制作头像软件下载,适合母子的网名有哪些?
如何获取PHP WAP自助建站系统源码?
如何在新浪SAE免费搭建个人博客?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
如何高效配置IIS服务器搭建网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。