风流倜傥、为啥要选取require.js

     
首先一个页面借使在加载三个js文件的时候,浏览器会停止网页渲染,加载文件愈来愈多,网页失去响应的时辰就能够越长;其次,由于js文件之间存在依赖关系,由此必需从严格管理教加载顺序,当信任关系很复杂的时候,代码的编纂和掩护都会变得困苦。

   
  require.js,正是为着消除这多个难题:

  1.   完毕js文件的异步加载,制止网页失去响应;  
  2.   管理模块之间的正视性,便于代码的编撰和护卫。

 

二、require.js的加载

     
第一步,去官方网站下载最新版本,间接放到页面进行加载

 <script src="js/require.js"></script>  

     
加载那一个文件或许会产生网页失去响应,能够将它放到页面包车型客车底层加载,也足以如此写 

 <script src="js/require.js" defer async="true" ></script>

   
  async属性注解那么些文件要求异步加载,幸免网页失去响应。IE不补助那本性情,只帮忙defer,所以把defer也写上。

   
  加载require.js现在,下一步将在加载大家自身的代码了,也正是进口,能够叫主模块,倘若文件名字为main.js,写成上面那样就能够了:

<script src="js/require.js" data-main="js/main"></script>    .js后缀可以省略

银河国际平台官方网站,  

三、主模块的写法

     
如若主模块信任于jQuery能够那样写

 require(['jquery'], function ($){
   alert($);
});

 

四、require.config()方法

 

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

 

 
  上边的代码给出了四个模块的文书名,路线暗许与main.js在同四个索引(js子目录)。假如那些模块在任何目录,比如js/lib目录,则有二种写法。

  • 生机勃勃种是逐条钦点路径

    require.config({
      paths: {
        ”jquery”: “lib/jquery.min”,
        ”underscore”: “lib/underscore.min”,
        ”backbone”: “lib/backbone.min”
      }
    });

  •  另风姿洒脱种则是一贯改换基目录(baseUrl)。

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

  •  
       假若某些模块在另一台主机上,也能够直接钦定它的网站,比方

    require.config({
      paths: {
        ”jquery”: “”
      }
    });

  

五、Intel模块的写法

   
 require.js加载的模块,接纳Intel标准。也等于说,模块必需依照英特尔的明显来写。

   
 
具体来讲,就是模块必得采纳一定的define(卡塔尔(英语:State of Qatar)函数来定义。假若八个模块不凭仗其余模块,那么能够向来定义在define(卡塔尔(قطر‎函数之中。

// 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(卡塔尔(英语:State of Qatar)函数的首先个参数,必需是一个数组,指明该模块的依据。

 define(['myLib'], function(myLib){
  function foo(){
    myLib.doSomething();
  }
  return {     //返回模块中的函数
    foo : foo
  };
});

   
 当require(卡塔尔(قطر‎函数加载上边那么些模块的时候,就可以先加载myLib.js文件。

 

六、加载非标准的模块(shim的选择方式)

 

 //  app.js
 function sayHello(name){
  alert('Hi '+name);
}

 

 //  main.js
require.config({
  shim: {
    'app': { //这个键名为要载入的目标文件的文件名,不能随便命名。
      exports: 'sayHello' //exports的值为my.js提供的 对外接口的名称
    }
  }
});

require(['app'], function(sayHello) {
    alert(sayHello())  
})

  

   
  导出多少个函数,意味着大家获得了二个javaScript类

   
  可是假诺在my.js中写了许多function,整合成多个function有一些艰难,想一向导出?方法如下:

 // app.js
function sayHi(name){
    alert('Hi '+name);
}
function sayHello(name){
    alert('Hiello  '+name);
}

// main.js  
  require.config({
    shim: {
      app: {
        init: function() { //这里使用init将2个接口返回
          return {
            sayHi: sayHi,
            sayHello: sayHello
          }
        }
      }
    }
  });

  require(['app'], function(a) {
    a.sayHi('zhangsan');
    a.sayHello('lisi');
  });

 
  
 shim的稳步导入

   require.config({  

    shim: {  
      'jquery.ui.core': ['jquery'],  //表示在jquery导入之后导入
      'jquery.ui.widget': ['jquery'],  
      'jquery.ui.mouse': ['jquery'],  
      'jquery.ui.slider':['jquery']
     },  
    paths : {    
       jquery : 'jquery-2.1.1/jquery',    
       domReady : 'require-2.1.11/domReady',    
       'jquery.ui.core' : 'jquery-ui-1.10.4/development-bundle/ui/jquery.ui.core',    
       'jquery.ui.widget' : 'jquery-ui-1.10.4/development-bundle/ui/jquery.ui.widget',    
       'jquery.ui.mouse' : 'jquery-ui-1.10.4/development-bundle/ui/jquery.ui.mouse',    
       'jquery.ui.slider' : 'jquery-ui-1.10.4/development-bundle/ui/jquery.ui.slider' 
        }
  });    

  require(['jquery', 'domReady','jquery.ui.core','jquery.ui.widget','jquery.ui.mouse','jquery.ui.slider'],    function($) {            
      $("#slider" ).slider({              
       value:0,           
       min: 0,           
       max: 4,           
       step: 1,           
       slide: function( event, ui ) {}     
        });    
   });