RequireJS實例分析


  隨着JS越來越龐大,已經不僅僅是以前復制粘貼做特效的時代了,JS越來越偏向於業務邏輯與應用。恰逢Node的流行,JS在web開發中占有越來越重要的地位。由於JS代碼龐大,文件數目多,傳統的使用<script src=""></script>會帶來很多性能的問題,因此requirejs可以為我們提供兩種解決思路:

  1 模塊化組織JS

  2 異步加載JS文件

  有了這兩種解決辦法,能有效的幫助我們解決前端代碼庫的組織難題。

  本文下面就模擬一個小例子,由於並沒有應用實踐,因此命名很戳,還請見諒。

 

  關於Require.js在多頁面應用的實踐,可以參考:multipage

層次組織

/public

  |------require.js、config.js、index.html

  |-------lib/

    |-------a.js、b.js

  |-------orthers/

    |-------c.js

文件功能

require.js:

  其中requirejs的核心代碼就是require.js文件,可以從官方網站上下載:

config.js:

  用於配置requirejs的相關內容,可以設置文件目錄,加載模塊命名匹配,以及一些依賴關系等等。

index.html:

  我們的測試頁面或者網址首頁。

/lib/a.js和/lib/b.js 以及 /others/c.js

  是測試的模塊js文件。

代碼詳情

index.html

<doctype html>
<html>
    <meta http-quiv="Content-Type" content="text/html;charset=UTF-8">
    <script data-main="config" src="require.js"></script>
</html>
<body>
    <h1>This is test for RequireJS</h1>
    <script type="text/javascript">
        alert("index");
    </script>
</body>

  其中,data-main指定主要的配置文件;src為requirejs的文件。

config.js

require.config({
    // baseUrl:'/',
    paths:{
        "a":"lib/a",
        "b":"lib/b",
        "c":"others/c"
    }
    });
require(['a','b','c'],function(a,b,c){
    a.hello();
    b.hello();
    c.hello();
});

  baseUrl指定所有文件的主要目錄,paths配置模塊名字以及其匹配的加載路徑。

  當有需要使用某些模塊時,就可以通過require([xxx],function(xxx){xxx});的方式使用。

a.js

define([], function() {
  return {
    hello: function() {
      alert("hello, a");
    }
  }
});

b.js

define([], function() {
  return {
    hello: function() {
      alert("hello, b");
    }
  }
});

c.js

define([], function() {
  return {
    hello: function() {
      alert("hello, c");
    }
  }
});

  模塊化文件,一般是一個功能是一個文件。文件的名字,就是上面requireconfig中配置的模塊名字。require加載文件時,會自動加上.js后綴。

  當某些模塊依賴其他模塊時,可以通過define([xxx],function(xxx){yyy});的方式添加依賴關系,require會在異步加載后,自動調整次序。

 

  當訪問index.html時,會先加載require.js然后把需要加載的文件都通過appendChild的方式,添加到index.html的底部。

  因此會先彈出index對話框,當執行config.js的后半部分代碼時,會依次使用a.js b.js c.js,因此也會依次彈出三個對話框。

 

  這就是簡單的模塊化組織架構,如果需要參考實例項目,可以學習測試樣例的源碼,它主要為elasticsearch提供前端UI。

參考

【1】阮一峰requirejs:http://www.ruanyifeng.com/blog/2012/11/require_js.html

【2】requirejs中文文檔:http://www.requirejs.cn/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM