javascript高级模块化require.js的具体使用方法


Posted in Javascript onOctober 31, 2017

本文介绍了require.js的具体使用方法,分享给大家,也给自己留个笔记。

Require.js:

RequireJS是一个非常小巧的javascript模块载入框架,是AMD(Asynchronous Module Definition,异步模块加载机制)规范最好的实现之一。最新版的requireJS压缩后只有14k,堪称非常轻量。它还同时可以和其他的框架协调工作,使用requireJS必将使我们的前端代码质量得以提升。

首先我们先来看一下一个普通的页面js加载

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="js/index02.js" ></script>
  </head>
  <body>
    <h1>this is a page.</h1>
  </body>
</html>

运行结果:

javascript高级模块化require.js的具体使用方法

此时,如果我们不对弹出框做操作,页面就不会接着加载,就不会有页面内容,这并不是我们想要实现的结果。

下面我们用require.js进行操作:

index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <script src="js/require2.1.11.js"></script>
    <script type="text/javascript">
      require(["js/index","js/index01"],function(){
        console.log("当js加载成功后会执行的函数");
      },function(){
        console.log("当js加载失败后会执行的函数");
      });
    </script>
  </head>
  <body>
  </body>
</html>

index.js

define(function(){
  console.log("this is a test!");
  function test(){
    console.log("haha,i am a test!");
  }
  test();
});

首先页面上不再导入test02.js,只是导入了requireJS,其次在javascript中我们使用require()方法,在其中传递了一个数组的参数,实参为我们要导入的js文件的【路径+文件名称。

此时的运行结果:

javascript高级模块化require.js的具体使用方法 

javascript高级模块化require.js的具体使用方法

javascript高级模块化require.js的具体使用方法

可以看出,此时页面内容已经显现出来了。并不像前面我们传统的一样在等待js运行完成后页面再加载,而是页面加载完成后才运行js代码,这样在运行效率上就大大的提高了。

根据上面的代码,我们可以来分析requirejs的基本API:

requireJS会定义三个变量:define,require,requirejs

  1. require==requirejs,一般使用require更简短。
  2. define 用来定义一个模块
  3. require 加载依赖模块(引用定义好的模块),并执行加载完后的回调函数

require有三个参数:

require(["js/index","js/index01"],function(){
        console.log("当js加载成功后会执行的函数");
      },function(){
        console.log("当js加载失败后会执行的函数");
      });
//第一个参数:定义require中的依赖,参数必须是数组形式,即使只有一个依赖,也必须使用数组形式传参。
//第二个参数:是一个回调函数,用来处理加载完毕后的逻辑,当所有模块加载完成后触发
//第三个参数:也是一个回调函数,用来处理模块加载失败后的情况。如上面代码,js中没有定义index01.js这个文件,所以出调用这个回调函数。

加载网络文件

之前我们加载的都是本地的js文件,但是,有些时候我们又需要加载网络上的文件,那又该怎么加载呢?下面我们就来介绍一下怎样加载网络上的js文件.

我们现在以加载一个jquery.js文件为例:

//百度cdn公共库jQuery地址:   http://apps.bdimg.com/libs/jquery/2.1.1/jquery.js 
//jQuery官方地址:      https://code.jquery.com/jquery-3.1.1.js
//注意:网络上去取时不能加后缀,否则取不到
require.config({
  paths : {
    //为网络上的库去一个名字:jquery
    "jquery" : ["https://code.jquery.com/jquery-3.1.1"]
  }
});

//
require(["jquery","js/test01","js/test02"],function(){
  alert("页面加载成功~~");
},function(){
  alert("页面加载失败~~")
});

在取网络上的文件时注意:

1、config方法的参数是一个对象
2、paths的值也是一个对象
3、当我们为网络上的库取名字是任意,但是建议取有意义的名字,别人可以通过名称知道你的网络资源是什么资源
4、库的值是一个数组,意味着可以多个同时写,防止网络异常取不到
5、特别注意:网络资源路径不能带后缀名,否则取不到
6、我们也可以先让去网络中去取,如果取不到,再在本地取,减轻本地服务的压力(属于项目优化)。

require.config({
  paths : {
    //这样配置,减轻本地服务器的压力
    "jquery" : ["https://code.jquery.com/jquery-3.1.1.js","js/jquery-1.8.3"]
  }
});

//
require(["jquery","js/test01","js/test02"],function(){
  alert("页面加载成功~~");
},function(){
  alert("页面加载失败~~")
});

同样我们也可以将本地的配置到paths中:

require.config({
  paths : {
    //这样配置,减轻本地服务器的压力
    "jquery" : ["https://code.jquery.com/jquery-3.1.1","js/jquery-1.8.3"],
    //将本地的js文件同样配置,之后引用
    "test01" : ["js/test01"],
    "test02" : ["js/test02"]
  }
});

//
require(["jquery","test01","test02"],function(){
  alert("页面加载成功~~");
},function(){
  alert("页面加载失败~~")
});

上面的例子中重复出现了require.config配置,如果每个页面中都加入配置,必然显得十分不雅,requirejs提供了一种叫”主数据”的功能,我们首先创建一个main.js:

require.config({
  paths : {
    //这样配置,减轻本地服务器的压力
    "jquery" : ["https://code.jquery.com/jquery-3.1.1","js/jquery-1.8.3"],
    //将本地的js文件同样配置,之后引用
    "test01" : ["js/test01"],
    "test02" : ["js/test02"]
  }
});

然后再页面中使用下面的方式来使用requirejs:

<script type="text/javascript" src="js/require2.1.11.js" ></script>
<script type="text/javascript" src="js/main.js" ></script>
<script type="text/javascript">

  require(["jquery","t1","t2"],function(){
    alert("页面加载成功~~");
  },function(){
    alert("页面加载失败~~")
  });

</script>

在官方提供了一种基于标签属性的方式:

<script data-main="js/main" src="js/require2.1.11.js" ></script>

将所有的配置和导入js都放在了main.js中,这样在页面只要这样一个标签就行了。

代码演示如下:

//test01.js--定义一个js模块
define(function(){
  function test(){
    console.log("this is test01.js");
  }
  test();

  $("p").css("color","#DB7093");
});
//main.js--requirejs的全局配置
require.config({
  paths:{
    "jquery":["jquery-1.8.3"],
    "test":["test01"]
  },
  shim:{
    "test":["jquery"]
  }
});
require(["test"],function(){
  console.log("success!");
});
//index.html--此时,引入js文件只需一行代码
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" data-main = "js/main" src="js/require2.1.11.js" ></script>
  </head>
  <body>
    <p>i am liyanan and this is a testn Page.</p>
  </body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript动画算法实例分析
Jul 31 Javascript
jquery实现的点击翻书效果代码
Nov 04 Javascript
js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
Apr 01 Javascript
js拖拽的原型声明和用法总结
Apr 04 Javascript
Javascript仿京东放大镜的效果
Mar 01 Javascript
关于javascript sort()排序你可能忽略的一点理解
Jul 18 Javascript
JS数组交集、并集、差集的示例代码
Aug 23 Javascript
node结合swig渲染摸板的方法
Apr 11 Javascript
Vue常用的几个指令附完整案例
Nov 06 Javascript
JS拖动选择table里的单元格完整实例【基于jQuery】
May 28 jQuery
d3.js 地铁轨道交通项目实战
Nov 27 Javascript
javascript利用键盘控制小方块的移动
Apr 20 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
Oct 31 #Javascript
jQuery简单实现对数组去重及排序操作实例
Oct 31 #jQuery
Node.js学习教程之HTTP/2服务器推送【译】
Oct 31 #Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
Oct 31 #Javascript
原生js实现仿window10系统日历效果的实例
Oct 31 #Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
Oct 31 #Javascript
Vue实战之vue登录验证的实现代码
Oct 31 #Javascript
You might like
截获网站title标签之家内容的例子
2006/10/09 PHP
DOM XPATH获取img src值的query
2013/09/23 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
2014/12/16 PHP
smarty简单应用实例
2015/11/03 PHP
php中通过eval实现字符串格式的计算公式
2017/03/18 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
用jQuery简化JavaScript开发分析
2009/02/19 Javascript
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
2014/06/20 Javascript
javascript引擎长时间独占线程造成卡顿的解决方案
2014/12/03 Javascript
JS+CSS实现的经典圆角下拉菜单效果代码
2015/10/21 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
Angular 路由route实例代码
2016/07/12 Javascript
Vue.js常用指令之循环使用v-for指令教程
2017/06/27 Javascript
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
JS 自执行函数原理及用法
2019/08/05 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
[05:35]DOTA2英雄梦之声_第13期_拉比克
2014/06/21 DOTA
Python基于select实现的socket服务器
2016/04/13 Python
Python的标准模块包json详解
2017/03/13 Python
python实现顺时针打印矩阵
2019/03/02 Python
使用pandas读取文件的实现
2019/07/31 Python
python IDLE添加行号显示教程
2020/04/25 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
python tkinter实现连连看游戏
2020/11/16 Python
html5使用canvas绘制文字特效
2014/12/15 HTML / CSS
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
劳动模范事迹材料
2014/01/19 职场文书
房屋所有权证明
2014/10/20 职场文书
2015年工商所工作总结
2015/05/21 职场文书
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
2022/06/21 Python
pytest实现多进程与多线程运行超好用的插件
2022/07/15 Python