首頁  >  文章  >  web前端  >  Require.js使用方法總結

Require.js使用方法總結

一个新手
一个新手原創
2017-10-26 09:48:271732瀏覽

一、為什麼要使用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([&#39;jquery&#39;], 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": "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min"
  }
});

五、AMD模組的寫法

     require.js載入的模組,採用AMD規範。也就是說,模組必須按照AMD的規定來寫。

#########     ###具體來說,就是模組必須採用特定的define()函數來定義。 ######如果一個模組不依賴其他模組,那麼可以直接定義在define()函數之中。 ######
// math.js
define(function (){
  var add = function (x,y){
    return x+y;
  };
  return {
    add: add
  };
});
###  ###載入方法如下:######
 // main.js
require([&#39;math&#39;], function (math){
  alert(math.add(1,1));
});
###  ###如果這個模組也依賴其他模組,那麼define()函數的第一個參數,必須是一個數組,指明該模組的依賴性。 ######
 define([&#39;myLib&#39;], function(myLib){
  function foo(){
    myLib.doSomething();
  }
  return {     //返回模块中的函数
    foo : foo
  };
});

     当require()函数加载上面这个模块的时候,就会先加载myLib.js文件。

六、加载非规范的模块(shim的使用方式)

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

require([&#39;app&#39;], function(sayHello) {
    alert(sayHello())  
})

      导出一个函数,意味着我们得到了一个javaScript类

      但是如果在my.js中写了很多function,整合成一个function有点麻烦,想直接导出?方法如下:

 // app.js
function sayHi(name){
    alert(&#39;Hi &#39;+name);
}
function sayHello(name){
    alert(&#39;Hiello  &#39;+name);
}
// main.js  
  require.config({
    shim: {
      app: {
        init: function() { //这里使用init将2个接口返回
          return {
            sayHi: sayHi,
            sayHello: sayHello
          }
        }
      }
    }
  });

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

     shim的有序导入

   require.config({  

    shim: {  
      &#39;jquery.ui.core&#39;: [&#39;jquery&#39;],  //表示在jquery导入之后导入
      &#39;jquery.ui.widget&#39;: [&#39;jquery&#39;],  
      &#39;jquery.ui.mouse&#39;: [&#39;jquery&#39;],  
      &#39;jquery.ui.slider&#39;:[&#39;jquery&#39;]
     },  
    paths : {    
       jquery : &#39;jquery-2.1.1/jquery&#39;,    
       domReady : &#39;require-2.1.11/domReady&#39;,    
       &#39;jquery.ui.core&#39; : &#39;jquery-ui-1.10.4/development-bundle/ui/jquery.ui.core&#39;,    
       &#39;jquery.ui.widget&#39; : &#39;jquery-ui-1.10.4/development-bundle/ui/jquery.ui.widget&#39;,    
       &#39;jquery.ui.mouse&#39; : &#39;jquery-ui-1.10.4/development-bundle/ui/jquery.ui.mouse&#39;,    
       &#39;jquery.ui.slider&#39; : &#39;jquery-ui-1.10.4/development-bundle/ui/jquery.ui.slider&#39; 
        }
  });    
 
  require([&#39;jquery&#39;, &#39;domReady&#39;,&#39;jquery.ui.core&#39;,&#39;jquery.ui.widget&#39;,&#39;jquery.ui.mouse&#39;,&#39;jquery.ui.slider&#39;],    function($) {            
      $("#slider" ).slider({              
       value:0,           
       min: 0,           
       max: 4,           
       step: 1,           
       slide: function( event, ui ) {}     
        });    
   }

以上是Require.js使用方法總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn