"a.js"
>
<
/script>
"b.js"
>
<
/script>
"d.js"
>
<
/script>
"e.js"
>
<
/script>
"f.js"
>
<
/script>
"g.js"
>
<
/script>
上面這樣載入主要出現的問題:
為了解決這樣的問題 於是有了require.js
官網位址
現在比較常用的amd
主要分為3步:
"js/require.js"
>
<
/script>
然後定義模組,
define
("模組名稱",[
"模組的依賴項"],
function()
)
在require.js中,引用乙個模組使用require.js提供的函式 require()
語法: require([
"模組檔案的路徑(不帶.js字尾的)"],
function()
)
定義模組的時候,有匯出項的情況
模組有匯出項,怎麼使用匯出項?
require([
"./modules/b"
,"./modules/c"
,'./modules/a'],
function
(mb, mc)
)
模組的依賴項
在定義乙個模組的時候,這個模組內部可能會使用到其他模組的內容,這些其他模組就可以稱作當前模組的依賴項
//5-模組的 依賴項
define([
'./c'],
function
(toolbox)
);
在require.js中,模組路徑的查詢方式, 一共有三種:
不做任何配置,直接以當前檔案的路徑作為參照require(["./modules/a"])如果設定了data-main屬性,那麼模組的查詢,會以data-main指定的檔案的路徑作為基礎(幾乎不用)
data-main是乙個屬性,是引入require.js的script標籤的屬性
這個屬性可以用來指定乙個檔案,載入檔案的路徑會以這路徑為基礎, 指定的檔案會在require.js載入完畢之後,通過非同步的方式載入,並且執行裡面的**,
"require.js" data-main=
"./js/"
>
<
/script>
如果通過require.config方法配置了基礎路徑,那麼所有的模組查詢都會以這個基礎路徑作為參照
//config方法是用來配置require的一些載入規則的!
require.
config(}
)//當引用模組的時候,模組的路徑 baseurl + 引用模組的路徑
// require(["dianzuan"]);
注意: 第三種方式中 找檔案的規則是:baseurl + paths
注意: 第三種方式中,
找檔案的規則是: baseurl + 檔案路徑 或者 baseurl + paths
如果引用模組的時候, 路徑寫法是如下 3 種形式之一, 就不遵守上面的規則了
1. 檔案路徑 加上了 .js 字尾, 將不拼接基礎路徑, 直接按照配置的路徑查詢
2. 檔案路徑 是以 / 開頭的絕對路徑,
會直接以絕對路徑讀取
(需要加上 .js 字尾)
3. 檔案路徑 以 http:
// 或者 https:
// 開頭的
有依賴項且有匯出項
require.
config(,
中可通過設定shim,讓不支援模組化的第三方內容
//和require.js能夠實現更好的配合
shim:
,//配置abc
abc:}}
)
前端模組化
前端模組化解決什麼問題?有了模組,我就可以很方便的使用別人的 想要什麼功能,就用載入什麼模組。但是,這樣做需要有乙個前提,那就是大家必須以同樣的方式編寫模組,否則就亂套了。所以組內需要有一套統一的模組規範。如何實現模組?1 物件字面量的變體 2 js設計模式的模組模式 3 採用成熟的庫檔案。前兩種方...
前端模組化
定義 具有相同屬性和行為的事物的集合 在前端中 將一些屬性比較類似和行為比較類似的內容放在同乙個js檔案裡面,把這個js檔案稱為模組 目的 為了每個js檔案只關注與自身有關的事情,讓每個js檔案各行其職 模組化 指的就是遵守commonjs規範,解決不同js模組之間相互呼叫問題 commonjs a...
前端模組化
當多人開發同一專案時,很容易就會產生命名衝突的問題,尤其是js檔案,任何的js引入順序的打亂都可能導致專案執行失敗,為了解決命名衝突的問題,在es6之前,可以使用函式閉包來解決這個問題。即可能像這樣 function 這樣雖然可以解決命名衝突的問題,但也使得 的復用性變得極差,因為其它的檔案將無法再...