疑問:為什麼會出現amd規範呢?為什麼會出現require.js呢?解決了什麼問題?
答案:在沒有amd規範之前,我們是採用commonjs規範,但是commonjs規範是同步載入模組,它是node普通採用的一種模組機制,對於node而言,常見的載入本地檔案或者其他各種i/o操作,速度是很快的,我們採用同步機制去載入模組檔案是沒有問題的,但是對於瀏覽器端而言,請求網路資源的速度是很慢的,如果依然採用同步方式去請求資源,瀏覽器端很可能造成阻塞問題,
所以,解決方法是什麼呢?amd(asynchronous module definition) 非同步模組定義 而require.js是amd規範的具體實現。
例如:如下**,
我們希望在index.html,引入main.js, a.js, b.js, c.js四個js檔案
第一種:最原始的做法,在index.html裡面,從上到下同步載入
"en">
問題:這樣只能從上到下,同步載入js檔案,可能由於前面的js檔案過大,造成阻塞問題
複製**
第二種:採用require.js來非同步載入js檔案
"en">//data-main去宣告主入口檔案
//寫法1:直接引入js檔案
require(['./a', './b', './c'], function
() );
//寫法2:設定js檔案別名
require.config(
});或者
require.config(
});require(['aaa', 'bbb', 'ccc'], function
() );
複製**
通過上面,可以知道:
amd是一種規範,而require.js是真正的實現,主要解決了兩個問題:
1:實現js檔案的非同步載入,避免同步載入導致的網頁阻塞
2: 定義模組之間如何相互依賴,可以更好的管理模組。
: 引入require.js,確定主入口檔案main.js
"en">
說明:data-main屬性用於說明require.js載入的模組主入口是什麼。
複製**
//在main.js中引入a.js模組:
require.config(
});require(['aaa'], function (a)
});複製**
使用define方法直接傳入乙個物件,或者傳入乙個函式,函式返回乙個物件
define();
複製**
前端模組化
前端模組化解決什麼問題?有了模組,我就可以很方便的使用別人的 想要什麼功能,就用載入什麼模組。但是,這樣做需要有乙個前提,那就是大家必須以同樣的方式編寫模組,否則就亂套了。所以組內需要有一套統一的模組規範。如何實現模組?1 物件字面量的變體 2 js設計模式的模組模式 3 採用成熟的庫檔案。前兩種方...
前端模組化
定義 具有相同屬性和行為的事物的集合 在前端中 將一些屬性比較類似和行為比較類似的內容放在同乙個js檔案裡面,把這個js檔案稱為模組 目的 為了每個js檔案只關注與自身有關的事情,讓每個js檔案各行其職 模組化 指的就是遵守commonjs規範,解決不同js模組之間相互呼叫問題 commonjs a...
前端模組化
當多人開發同一專案時,很容易就會產生命名衝突的問題,尤其是js檔案,任何的js引入順序的打亂都可能導致專案執行失敗,為了解決命名衝突的問題,在es6之前,可以使用函式閉包來解決這個問題。即可能像這樣 function 這樣雖然可以解決命名衝突的問題,但也使得 的復用性變得極差,因為其它的檔案將無法再...