seajs學習筆記(基礎)


一:前端開發中常遇到的問題
      如果我們的網站簡單的時候,結構上也許不會有什么問題,但是如果我們的網站越來復雜的時候(比如功能越來越多的時候,加入項目的人越來越多的時候),我們書寫的代碼就會遇到下面的兩個問題:
 
    1. 惱人的命名沖突
     比如我們多人開發一個項目,事先由我自己寫好了一個共公的組件庫common.js供大家調用,里面的包括
         function tab(){
                 實現代碼:
          };  
        function drag(){ 
              實現代碼:
        };    
        function dialog(){ 
               實現代碼:
        };.........
      同事用的時候直接在頁面里引入common.js,然后調用下面的方法即可,如果后面又有一些新的同事加進來,他們在做其它的功能開發的時候,很有可能在頁面也會出現我組件庫里的方法,這樣這兩個組件之間就出現了沖突,是很影響功能效果的。
    這個時候我們通常的做法是用命名空間來解決沖突的問題:比如原來的common.js變成
org.tab=function(){
     實現代碼:
};
org.drag=function(){
    實現代碼:
};
org.dialog=function(){
     實現代碼:
}
    這樣做在一定的程度上是解決了命名沖突的問題,但是由於前面的名字有可能比較長,調用的時候並不是特別的方便,而且這種做法只是降低了命名沖突的問題,並不能完全解決這個問題。看似簡單的沖突問題,但是如何才能優雅的解決,解決方案先不講,先看下面一個問題。
 
   2. 繁瑣的文件依賴
      繼續上面的例子,我接着ul層通用組件,這樣其他的同事就不用再重復的寫了。
      其中有一個被大家非常喜歡的組件是tab.js,使用方法很簡單。例如下面的調用
      <script src="common.js"></script>
      <script src="tab.js"></script>
    
      但是即便它非常的好用,還是會有同事跑過來說這個組件在調用的過程中會出現問題,經過一番的排查發現,原來在調用tab.js之前沒有引用common.js,導致tab.js無法正常工作。
     所以從以上的問題中可以看出,沖突與依賴是前端開發中經常出現的問題,下面我們來看如何用模塊化開發來解決,我們使用Seajs作為模塊開發的框架。
 
二:Sea.js是什么?
        sea.js是一個加載器,是淘寶前端攻城師玉伯所著,他是根據commonjs規范的一種表現。何為commonJS?commonJs可以理解成一個組織,他們中的所有人都致力於提高javascript程序的可移植性以及可交互性。這種可移植性以及可交互性不僅僅局限於瀏覽器端,而且也包括了服務器端的javascript.
       那seaJS到底是什么呢?seaJS就是根據commonJS組織規范寫的一個加載器。其內部可用的API並不多主要有以下幾個:alias,config,use,define。主要就這四個API。seaJS主要就是根據這四個API對其環境中的javascript進行管理的。
         sea.js主要用在 大型項目或是 多人合作的時候,如果小型的企業網站完全沒有必要用到它。另外,同  sea.js很相似的還有一個模塊開發的加載器,它叫require.js。它們之間有什么不同呢?
        sea.js是國產的,遵循CMD( common module define)規范     下載官網: http://seajs.org/docs/
        require.js是進口的,遵循AMD( Asynchronous module define)規范,下載官網: http://www.requirejs.org/

三:為什么我們要使用Sea.js?
 
        seajs追求簡單、自然的代碼書寫和組織方式,具有以下的核心特征:
        1.簡單友好的模塊定義規范:sea.js遵行CMD規范,可以像Node.js一樣書寫模塊代碼;
        2.自然直觀的代碼組織方式:依賴的自動加載、配置簡潔清晰,可以讓我們更多的享受編碼的樂趣;
        sea.js提供了常用插件,非常有助於開發調試和性能優化,並具有豐富的可可擴展接口;
 
四:Sea.js的兼容性
      sea.js有着完備的測試用例,兼容所有的主流瀏覽器
        chrome 3+    √
        FireFox 2+    √
        Safari  3.2+   √
        opera  10+   √
        IE5.5+          √
        sea.js還可以運行在Mobiel端,包括Hybrid上。理論上sea.js可以運行在任何的瀏覽器引擎上。
 
五:使用Sea.js
         上面講了一些基礎知識,下面來講一下 sea.js該怎么用:
      主要可以分四步:
      1) 引入sea.js庫:在文件頭開始的時候引入 <script src="sea.js"></script>,路徑要自己根據實際情況改變。
      2 )  如何變成模塊:
           單寫一個js文件,用define定義模塊,然后加入普通的函數形式。比如我們定義了普通函show(),
           普通函數:function show(){
                                alert(1111);
                            }
            sea.js模塊:define(function(require,exports,module){  
                                   function show(){
                                        alert(1111);
                                     }
                               });
            注意:define(),這種形式也相當於JS里面的函數形式,所以里面可以套用函數,里面的第一個函數有三個參數,分別是:request,exports,module,這里有固定的三個參數,不允許隨意修改字母以及變換位置,你可以三個參數都寫或是三個都不寫,要不就是只寫第一個,或是只寫前兩個,這就是sea.js里面的死規定。
         3 )  如何引入模塊:
            exports:
            seajs.use("相對地址的模塊名",function(參數){ });
 
            sea.js中三個參數分別是什么意思呢?
            require:引入,模塊之間依賴的接口
            exports:導出,對外提供接口
            module:批量導出
 
       4)如何依賴模塊:
            普通模塊: require("相對地址的模塊名")
            seajs模塊:require("相對地址的模塊名"). seajs模塊名

 


免責聲明!

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



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