ProjectOne(04) - 番外篇02 requirejs初體驗

前幾天有個獵頭找到俺,說起看到我在智聯上的簡歷。

說有個公司想讓我去面試一下。就順便轉發了一下招聘要求。

看了一眼。

猴賽雷!!!是招Web前端,最好還有hybrid app開發經驗。

我看了一圈,除了懂了一點加分項nodejs之外。貌似別的都不太及格的樣子。

好吧,既然咱不懂,咱就來學唄。多大點事。


其中有一個名詞叫requirejs,

百度了一下,貌似就是個模塊適時加載器的作用。


ok,那麼,今天就在ProjectOne上寫一個requirejs的測試項目唄。

首先,我們現在ProjectOne下面新建一個項目咯。

在ProjectOne的根目錄下的web目錄裏面,新建一個Test文件夾,然後Test文件夾下面新建一個001文件夾,

再然後在這個文件夾下面新建一個index.html和一個js文件夾。


接着,當然還是去requirejs的官網下一個包啦。地址是這個:http://requirejs.org/docs/download.html

當前requirejs的版本是2.1.22,我們選擇右邊的minified,右鍵目標另存爲,進行保存。

將它存到ProjectOne/Test/001/js文件夾下面。



然後,因爲是要測試動態加載,那麼加載的js我們自然也要選一個咯。

好吧,那就加載jQuery和zepto,這兩個比較常用的包吧!


去jQuery官網和zepto(官?)網...(http://www.css88.com/doc/zeptojs_api/),分別下了兩個包:jquery-1.12.1.min.js 和 zepto.min.js (1.1.6版)

下2個包是因爲聽說在requirejs裏面不能用zepto。

雖然《bootstrap中文網》不推薦我們用Zepto,(原文:http://www.bootcss.com/article/why-we-dropped-zepto/)

但是Zepto還是很多人在用的。所以暫時還是考慮嘗試支持一下。


分別將2個包夜同樣拷貝到js文件夾下面。


下面開始寫代碼。

測試思路很簡單,

寫3個按鈕,1個同時加載2個包,2個分別對應加載對應的包。

寫2個輸入框,通過點擊按鈕改變框內的內容。

都是用jQuery和zepto的語法來進行操作。

然後觀察chrome的F12(開發者工具/Firebug),查看network一項,看模塊是不是正確在點擊按鈕後,加載對應的模塊。


下面是實例代碼。

首先,我們的index頁面需要上面說的3個按鈕2個輸入框,並且要3個簡單的點擊事件。

代碼大概是這樣的。

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
輸入框1:<input type="text" id="input1" />
<br />
輸入框2:<input type="text" id="input2" />
<br />
<button onclick="click_all()">全部加載</button>
<button onclick="click_jquery()">加載jQuery</button>
<button onclick="click_zepto()">加載Zepto</button>
</body>
<script>
    function click_all(){

    }

    function click_jquery(){

    }

    function click_zepto(){

    }
</script>
</html>

然後,在head中引入requirejs包,

這裏要注意一點就是,引入requirejs包需要在後面添加一個data-main屬性。

<script src="js/require.js" data-main="js/main"></script>
這裏的js/main是聲明requirejs包的入口函數是js文件夾下的main.js文件。(這個寫法有點像java ?

然後,我們就需要在js文件夾下面創建一個main.js文件咯。

這個js文件前提是需要包含一個自執行函數,我們就習慣性的匿名咯。

主要作用就是配置一個require.config函數對象的樣子。看如下代碼:

(function(){
    require.config({
        baseUrl:    'js/',
        defaultExt: '.js',
        paths:{
            jquery:'jquery-1.12.1.min',
            zepto:'zepto.min'
        }
    });
})();

這裏的baseUrl是爲了將路徑引導到js文件夾下面,如果不用的話,那麼下面的path就要寫成zepto:'js/zepto.min'這樣的了。

defaultExt是爲了配置引用的文件的默認後綴名,所以下面的paths裏面指定的文件“不需要加.js”。(貌似也不允許加

這樣配置就完成了。(paths裏面的jquery屬性名請全小寫,別問我爲什麼...


然後,我們就在index.html的script部分,click_jquery和click_zepto函數里加幾句代碼試一下效果吧。

requirejs的語法是這樣的 require([path中定義的模塊名,多個用逗號分隔],function(如果有的話,傳入模塊的對象,如$,必須按順序){//todo}); 這樣。

那麼示範代碼就寫成這樣。

    function click_jquery(){
        require(['jquery'],function(jQuery){
            jQuery('#input2').val('click_jquery jquery!');
        });
    }

    function click_zepto(){
        require(['zepto'],function($){
            $('#input1').val('click_zepto zepto!');
        });
    }

這個時候,我們去點擊“加載jQuery”按鈕,輸入框2是能正確顯示的,

但是!!!點擊“加載Zepto”卻不行。

這是因爲zepto的代碼不符合AMD規範,

這時,從百度可以得知有幾種解決辦法。

第一種是改zepto的代碼,但是我個人覺得麻煩,就用第二種,

requirejs的conifg裏面加一個shim屬性,這個屬性是爲了支持那些不規範的代碼用的。

我們加入以下代碼:

paths:{.....}
,
shim:{
            zepto:{
                exports:'$'
            }
        }
這樣,“加載Zepto”按鈕也有效果了。


刷新頁面,打開F12觀察Network。可以看到,分別點擊2個按鈕之後,是分別加載2個包文件的。


接下來,我們補充完click_all的代碼:

    function click_all(){
        require(['zepto','jquery'],function($,jQuery){
            $('#input1').val('click_all zepto !');
            jQuery('#input2').val('click_all jQuery!');
        });
    }
再次刷新頁面。點擊click_all的按鈕可以看到兩個包都被同時加載了。


至此,

我們的引入require.js包,設置main.js文件,

配置require.config裏面的屬性,配置paths,非標準包shim,

require()引用並調用。

這幾個步驟都做完了。

這也是一個比較基本的,基礎的requirejs的用法了吧!!!???對吧。。。


說不定還有人要我說說用它的好處。

好處就是一開始不用加載很多包,

能迅速展示頁面,

並且通過shim能模塊化很多包及功能,適合更龐大的系統開發和組合。

就醬紫!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章