require.js

一、 若是隻是爲了加載依賴 :require和define在使用上沒有區別(若是隻是加載依賴,只用require就能夠了);可是若是你要定義一個模塊被其餘人使用,須要return時就須要define。html

二、 Define定義的模塊,require在加載時,return的值做爲一個參數傳遞到回調函數中。(通常define定義的模塊,return都是一個對象,這樣在require加載的時候,做爲參數傳進去能夠直接使用對象 . 方法獲取到)。webpack

三、 理論上,require.js加載的模塊,必須是按照AMD規範、用define()函數定義的模塊。可是實際上,雖然已經有一部分流行的函數庫(好比jQuery)符合AMD規範,更多的庫並不符合。(我的總結:require中講是否是AMD規範,首先該js文件都是一個全局變量,多個全局變量更是非AMD規範了。其它的屬性方、法都是掛在這個變量下的。不是AMD規範的js文件,在require傳到回調函數中的參數是一個未定義的)web

四、 多個地方require一個js文件,這個js文件實際只會執行一次。segmentfault

五、requireJS原理解析  :  https://blog.csdn.net/cde7070/article/details/65935888

六、require.js的用法    : http://www.ruanyifeng.com/blog/2012/11/require_js.html

 

 

總結:

    一、requirejs的能夠把全部的js文件當成模塊來使用,當程序須要用到對應的js文件時,就把對應的js文件經過添加script標籤,把它加載到頁面中執行。若是須要依賴的文件,就先添加script標籤,在執行當前的文件。異步

    二、經過script標籤加載是異步的,js的執行是同步的(即加載的同時js代碼從上往下執行)。因此有依賴的話,函數必須在require的回調函數中執行。async

               三、從require的功能能夠看出,一個頁面中有多個js文件用require進行模塊加載會很是好。可是頁面js文件很少就不必了。函數

 


 

requireJS 加載 js文件總結 :

  參考: http://www.javashuo.com/article/p-pfmuyjdw-bx.html  或 https://blog.csdn.net/aitangyong/article/details/49425061requirejs

一、requireJS 加載模塊(js文件)的實現:各個模塊悄無聲息的建立script標籤加載。ui

二、script標籤有onLoad,onerror事件,經過監聽 這寫事件,加載完就就會觸發onload事件,執行相應的函數。這樣就實現了異步加載文件。(script標籤加載js文件是異步的)spa

三、淺談script標籤中的async和defer   :    http://www.javashuo.com/article/p-aexzjbby-bn.html

  經過分析這篇文檔,能夠知道script標籤有沒有 async和defer 屬性的區別。從而實現異步加載的功能。

四、requireJS 屢次使用require加載同一個文件,並不會重複加載這個文件。參考  :  https://segmentfault.com/q/1010000007564742

  這個 function 實際是一個 factory(工廠模式,不明白的話就去搜下),這個 factory 在須要使用的時候(require("xxxx") 的時候)纔有可能會被調用。

  爲何是有可能?由於若是檢查到已經調用過,已經生成了模塊實例,就直接返回模塊實例,而再也不次調用工廠方法了。(即不會再加載文件,將以前的模塊實例返回給它了)

  require(['math'], function (math){   // 回調函數中的math參數就是 require加載後返回的模塊實例,回調函數中能夠直接使用這個模塊實例的方法。

    alert(math.add(1,1));        // requirejs 是 AMD模塊規範,調用模塊實例的方法是在回調函數中;

  });

   注意 : AMD 和CommonJS 都是經常使用 require()語句加載模塊,可是不一樣於CommonJS,它要求兩個參數。而CommonJS中的require()語句只要加載模塊(js文件)就能夠了。

      這樣,模塊方法就能夠在全局中使用了。從這條特性中能夠猜想webpack中js文件用require引入,用的應該是CommonJS模塊規範。和requirejs沒有關係。

 var math = require('math');    // CommonJS 中的 require()函數是同步的,而AMD 中的是異步執行的。
 math.add(2,3); // 5
相關文章
相關標籤/搜索