jQuery技术

require.js学习总结

字号+ 作者:H5之家 来源:H5之家 2017-06-28 13:02 我要评论( )

require.js学习总结

1、为什么使用require.js

作为命名空间;

作为命名空间使用;

异步加载js,避免阻塞,提高性能;

js通过require加载,不必写很多script

2、require.js的加载

require.js下载

下载后,放在指定目录就可以加载了

<script src="js/require.js"></script> 有人可能会想到,加载这个文件,也可能造成网页失去响应。解决办法有两个,一个是把它放在网页底部加载,另一个是写成下面这样:

<script src="js/require.js" defer async="true" ></script> async属性表明这个文件需要异步加载,避免网页失去响应。IE不支持这个属性,只支持defer,所以把defer也写上。

这种写法虽然简单,但其实并不推荐,一般的写法还要再加个属性:

<script data-main="js/main" src="js/require-jquery.js"></script> 就像一个c程序总有一个 main 方法作为入口一样,上面这种写法,做了几件事情:
1、加载了 require-jquery.js 文件。注意,官方提供了 require.js和 jquery 的打包版本,推荐。
2、在加载之后,加载入口文件 js/main.js ,注意,main.js 写进去的时候,不需要后缀名。
你的所有其他 js 模块文件,都可以写在 main.js 里面,通过 main.js 加载。

3、require.js的配置

在data-main指定的主文件中,通过require.config来配置,并加载其他js模块

require.config({ baseUrl: 'js/', paths: { "backbone": "backbone", "underscore": "underscore" }, shim: { "backbone": { deps: [ "underscore" ], exports: "Backbone" }, "underscore": { exports: "_" } } }); baseUrl:指定基路径

paths:模块加载路径

shim:加载非AMD规范模块      

  • exports值(输出的变量名),表明这个模块外部调用时的名称;
  • deps数组,表明该模块的依赖性。
  • 主模块可以将项目基础模块加载加来并定义全局方法等
  • require(['jquery', 'underscore', 'backbone'], function ($, _, Backbone){     // some code here   });
  • 4、定义模块(符合AMD规范) require.js加载的模块,采用AMD规范。也就是说,模块必须按照AMD的规定来写。
    具体来说,就是模块必须采用特定的define()函数来定义。如果一个模块不依赖其他模块,那么可以直接定义在define()函数之中。
    假定现在有一个math.js文件,它定义了一个math模块。那么,math.js就要这样写:

    // 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     };   });

    定义的模块返回函数个数问题

    1、define 的return只有一个函数,require的回调函数可以直接用别名代替该函数名。

    2、define 的return当有多个函数,require的回调函数必须用别名调用所有的函数。

    require(['selector','book'], function(query,book) { var els = query('.wrapper'); book.fun1(); book.fun2(); }); 此处query 函数是1的情况,book 函数是2的情况。
    5、加载js文件 到此为止,我们遇到了两个关键词,一个是 define ,可以用来定义模块(命名空间),第一部分我们讲了;还有一个是 require,可以直接加载其他 js。它除了简单的用法:

    <script> require( ["some" ] ); </script> 之外,还有和 define 类似的复杂用法:
    <script> require(["aModule", "bModule"], function() { myFunctionA(); // 使用 aModule.js 中的函数 myFunctionA myFunctionB(); // 使用 bModule.js 中的函数 myFunctionB }); </script> 总结一下,define 是你定义自己的模块的时候使用,可以顺便加载其他js;require 直截了当,供你加载用的,它就是一个加载方法,加载的时候,可以定义别名。
    6、requ.js插件

    require.js还提供一系列插件,实现一些特定的功能。

    domready插件,可以让回调函数在页面DOM结构加载完成后再运行。

    require(['domready!'], function (doc){   // called once the DOM is ready }); text和image插件,则是允许require.js加载文本和图片文件。
    define([     'text!review.txt',     'image!cat.jpg'     ],     function(review,cat){       console.log(review);       document.body.appendChild(cat);     }   ); 类似的插件还有json和mdown,用于加载json文件和markdown文件。

    7、其他问题 1、路径与后缀名

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • jquery基础研究学习【效果】

      jquery基础研究学习【效果】

      2017-06-27 12:02

    • 学习jQuery安卓手机版下载v1.0

      学习jQuery安卓手机版下载v1.0

      2017-06-27 09:00

    • require.js入门教程

      require.js入门教程

      2017-06-26 17:01

    • jquery学习之路之测验错题集

      jquery学习之路之测验错题集

      2017-06-26 15:02

    网友点评