require.js的基础用法

requrie的优点:
(1)实现js文件的异步加载,避免网页失去响应;

(2)管理模块之间的依赖性,便于代码的编写和维护。


加载require:

加载require的时候有可能造成网页失去响应,解决办法:1.<script src="js/require.js"></script>放在页面的底部加载。2.<script src="js/require.js" defer async="true" ></script>用这种方式来编写。其中defer兼容IE


使用方法:

1.指定网页主模块:<script src="js/require.js" data-main="main"></script>  

指定main.js为主模块,这个文件会第一个被require.js加载。由于require.js默认的文件后缀名是js,所以可以把main.js简写成main

2.编写主模块:

主模块依赖于其他模块,这时就要使用AMD规范定义的的require()函数。

例:

  require(['moduleA', 'moduleB', 'moduleC'], function (moduleA, moduleB, moduleC){

    // some code here

  });

如上所示,require()函数接受两个参数。

第一个参数是一个数组,表示所依赖的模块,上例就是['moduleA', 'moduleB', 'moduleC'],即主模块依赖这三个模块;

第二个参数是一个回调函数,当前面指定的模块都加载成功后,它将被调用。加载的模块会以参数形式传入该函数,从而在回调函数内部就可以使用这些模块。

require()异步加载moduleA,moduleB和moduleC,浏览器不会失去响应;它指定的回调函数,只有前面的模块都加载成功后,才会运行,解决了依赖性的问题。


3.加载规范模块

使用require.config()方法,可以对模块的加载行为进行自定义。require.config()就写在主模块(main.js)的头部。参数就是一个对象,这个对象的paths属性指定各个模块的加载路径。

例:

require.config({
    paths: {
      "jquery": "jquery.min", "underscore": "underscore.min","backbone": "backbone.min"
    }
  });
如果这些模块在其他目录,比如js/lib目录,则有两种写法。一种是逐一指定路径。一种是指定路径后再指定加载路径。

例:

require.config({
    paths: {
      "jquery": "lib/jquery.min",
      "underscore":"lib/underscore.min",
            "backbone":"lib/backbone.min"
    }
  });
 
 
require.config({
    baseUrl: "js/lib",
    paths: {
      "jquery":"jquery.min",  
            "underscore":"underscore.min",
            "backbone": "backbone.min"
    }
  });


 require.js加载的模块,采用AMD规范。也就是说,模块必须按照AMD的规定来写。 
 
具体来说, 就是模块必须采用特定的define()函数来定义。如果一个模块不依赖其他模块,那么可以直接定义在define()函数之中。例:

define(function (){
    var add = function (x,y){
      return x+y;
    };
    return {
      add: add    };
  });
如果这个模块还依赖其他模块,那么define()函数的第一个参数,必须是一个数组,指明该模块的依赖性。参考第二条
当require()函数加载上面这个模块的时候,就会先加载myLib.js文件。

例:

define(['myLib'], function(myLib){
    function foo(){
      myLib.doSomething();
    }
    return {
      foo : foo
    };
  });

4.加载非规范模块

如果这个模块是非规范模块,必须要先定义它的特征;

require.config()接受一个配置对象,这个对象除了有前面说过的paths属性之外,还有一个shim属性,专门用来
配置不兼容的模块。具体来说,每个模块要定义
(1)exports值(输出的变量名),表明这个模块外部调用时的名称;
(2)deps数组,表明该模块的依赖性。

例子:

shim: {
    'jquery.scroll': {
      deps: ['jquery'],
      exports: 'jQuery.fn.scroll'
    }
  }






猜你喜欢

转载自blog.csdn.net/h13783313210/article/details/79035646