广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >Require.js有什么用
  • 889
分享到

Require.js有什么用

2024-04-02 19:04:59 889人浏览 安东尼
摘要

小编给大家分享一下Require.js有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一:什么是require.js①:r

小编给大家分享一下Require.js有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一:什么是require.js

①:require.js是一个js脚本加载器,它遵循AMD(Asynchronous Module Definition)规范,实现js脚本的异步加载,不阻塞页面的渲染和其后的脚本的执行,并提供了在加载完成之后的执行相应回调函数的功能;

②:require.js要求js脚本必须要实现模块化,即文件化;而require.js的作用之一就是加载js模块,也就是js文件。

③:require.js可以管理js模块/文件之间的依赖;即不同的框架例如JqueryangularJs等采用了不同的语法,而使用这些语法的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" ></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.js有什么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网VUE频道!

--结束END--

本文标题: Require.js有什么用

本文链接: https://www.lsjlt.com/news/71994.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Require.js有什么用
    小编给大家分享一下Require.js有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一:什么是require.js①:r...
    99+
    2022-10-19
  • Require.js怎么用
    小编给大家分享一下Require.js怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、为什么要使用require.js首...
    99+
    2022-10-19
  • css是什么?有什么用?
    CSS,即层叠样式表(Cascading Style Sheets),是一种用于网页设计的样式语言。通过CSS,你可以改变HTML页面上各个元素的外观、布局和行为。CSS最初是由赛迪公司(斯佩克特公司)的开发者创建的,并于1996年成为一项...
    99+
    2023-05-14
  • OSCache有什么用
    这篇文章给大家分享的是有关OSCache有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。OSCache是一个开放式资源缓冲库,可从http://www.opensymphony.com/oscache/免费...
    99+
    2023-06-03
  • Rxjava有什么用
    小编给大家分享一下Rxjava有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!官方的介绍支持Java6+android 2.3+异步的基于观察者设计模式(O...
    99+
    2023-05-30
    rxjava
  • Swing有什么用
    这篇文章主要介绍Swing有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!swing是java GUI应用程序,也就是java做的桌面应用。运行swing程序要求用户电脑上有java环境,这一点不太现实也不方便...
    99+
    2023-06-02
  • serialVersionUID有什么用
    这期内容当中小编将会给大家带来有关serialVersionUID有什么用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。序列化是一种对象持久化的手段。普遍应用在网络传输、RMI等场景中。类通过实现 jav...
    99+
    2023-06-19
  • Spring有什么用
    这篇文章主要介绍了Spring有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、Spring介绍简介Spring 框架为现代基于 java 的企业应用程序提供了一个全...
    99+
    2023-06-20
  • WebGL有什么用
    这篇文章主要介绍了WebGL有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。基本概念WebGL 经常被当成 3D API,人们总想“我可以使用 WebGL 和一些神奇的...
    99+
    2023-06-27
  • DataGrip 有什么用
    这篇文章主要介绍了DataGrip 有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。DataGrip 版是由JetBrains公司推出...
    99+
    2022-10-18
  • redis有什么用
    这篇文章主要介绍了redis有什么用,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。Redis是一个开源的使用ANSI C语言编写、支持网络、可基...
    99+
    2022-10-18
  • SQL有什么用
    小编给大家分享一下SQL有什么用,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!Sql(STructured Query Language)是管理数据库所有操作的通用语言,是一种资料库查询和程式...
    99+
    2022-10-18
  • mydumper有什么用
    这篇文章给大家分享的是有关mydumper有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 Mydumper主要特性:是一个针对MySQL的高性...
    99+
    2022-10-18
  • InnoDB有什么用
    小编给大家分享一下InnoDB有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!InnoDB是一个通用的高性能、高可靠性的存...
    99+
    2022-10-18
  • MongDB有什么用
    这篇文章给大家分享的是有关MongDB有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.    什么是NoSQlNoSQL:Not Only SQL,...
    99+
    2022-10-19
  • SQLite有什么用
    这篇文章主要介绍SQLite有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是SQLiteSQLite是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个...
    99+
    2022-10-19
  • Mybatis有什么用
    这篇文章将为大家详细讲解有关Mybatis有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。简介MyBatis的前身叫iBatis,本是apache的一个开源项目, ...
    99+
    2022-10-19
  • navicat有什么用
    这篇文章主要介绍navicat有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Navicat是一套快速、可靠并价格相当便宜的数据库管理工具,专为简化数据库的管理及降低系统管理成...
    99+
    2022-10-18
  • nodeJS有什么用
    这篇文章主要为大家展示了“nodeJS有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“nodeJS有什么用”这篇文章吧。一、node概要对nodeJS早有...
    99+
    2022-10-19
  • vuex有什么用
    这篇文章主要为大家展示了“vuex有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vuex有什么用”这篇文章吧。Vuex 简介Vuex 是一个专为 Vue...
    99+
    2022-10-19
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作