當前位置:
首頁 > 最新 > 前端模塊化CMD規範seajs的使用

前端模塊化CMD規範seajs的使用

前端模塊規範有三種:CommonJs,AMD和CMD。

CommonJs用在伺服器端,AMD和CMD用在瀏覽器環境

AMD 是 RequireJS 在推廣過程中對模塊定義的規範化產出。

CMD 是 SeaJS 在推廣過程中對模塊定義的規範化產出。

AMD:提前執行(非同步載入:依賴先執行)+ 延遲執行

CMD:延遲執行(運行到需載入,根據順序執行)

這篇講的是CMD規範。

CMD 即通用模塊定義,CMD規範是國內發展出來的,就像AMD有個,CMD有個瀏覽器的實現,要解決的問題和一樣,只不過在模塊定義方式和模塊載入(可以說運行、解析)時機上有所不同。接下來進入主題,如何使用SeaJs。

首先展示一下項目的目錄結構:

接下來就是使用:

1.

在index.html中引入sea.js模塊

2.

使用seajs.use()方法執行模塊

seajs.use("./static/main.js")

其中main.js中定義模塊:

define(function(require,exports,module){

letapp=document.getElementById("app")

app.innerHTML = "main app"

})

你可能不知道define是什麼鬼,還有裡面函數里三個參數是什麼,先別急,這裡我們先這麼寫,然後打開index.html後,頁面上展示的就是"main app"了,當然我們的代碼不可能全部寫在這裡,既然是模塊化,就需要引入我們寫好的模塊。

3.

引入模塊文件

這裡我們寫入一個叫module1.js的文件,內容如下:

define(function(require,exports,module){

letapp="module1-app"

exports.app=app

})

在打開main.js,在其中添加引入,內容如下:

define(function(require,exports,module){

letapp=document.getElementById("app")

// 不使用別名

letmodule1=require("./module1.js")

app.innerHTML=module1.app

})

保存退出,再一次打開index.html,這時你會發現頁面上出現的就是「module1-app」了,現在我們就完成了模塊化。

現在回過頭來看一下遺留的問題,define函數:

define是seajs提供的一個函數,用來定義一個模塊,其中可以傳一個字元串,也可以是一個函數,我們這裡就傳了一個函數,其中require用來引入我們需要的其他模塊,exports和module都是用來導出對象。

當然這只是最簡單的使用實例,現在我們在豐富一下它,更貼近我們在項目中的開發,talk is cheap ,show me your code

在index.html中:

seajs-demo

// // 不使用別名

// seajs.use("./static/main.js")

// 使用別名

seajs.config({

alias:{

"module1":"../static/module1.js",

"module2":"../static/module2.js",

"main":"./static/main",

"jquery":"jquery-1.11.0.min.js"

}

})

console.log(seajs)

seajs.use("main")

// 使用多個模塊,載入完後執行回調

// seajs.use(["main","jquery"],function(m, $){

// console.log(m)

// console.log($)

// })

seajs-demo

main.js中改造成這樣:

define(function(require,exports,module){

letapp=document.getElementById("app")

// 不使用別名

// let module1 = require("./module1.js")

// let module2 = require("./module2.js")

// 使用別名

letmodule1=require("module1")

letmodule2=require("module2")

let$=require("jquery")

console.log(module1)

console.log(module2)

console.log($)

$("#app").css("color","red")

app.innerHTML=module2.app

})

引入的模塊module1.js

define(function(require,exports,module){

letapp="module1-app"

// 使用別名引入模塊

letmodule2=require("module2")

console.log(module2)//module2-app

exports.app=app

})

引入的模塊module2.js

define(function(require,exports,module){

letapp="module2-app"

module.exports={

app

}

})

這裡我們還引入了jquery,因為jquery是AMD規範的,所以我們需要對jquery進行一下改造:

define(function(require,exports,module){

//直接複製jquery的源碼過來就ok了

})

這樣我們就可以引入jquery模塊了

現在來解釋一下使用到的方法:

seajs.config(}),使用別名,我們要引入的模塊如果url過長肯定特別煩,而且要引入的地方特別多,所以別名出現了,使用別名的地方主要有兩個方法,一個是require(),另一個是seajs.use(),我們看一下控制台列印seajs對象就會一清二楚了

載入的模塊都是相對於base:"http://localhost:63342/seajs/sea-module/"來獲取的

a: ../ 表示上一目錄

b: ./ 表示當前目錄

c: 直接跟文件名 表示在base下追隨

這樣別名的使用就變得簡單多了吧

seajs.use(),可以使用多個模塊,傳遞一個數組,另一個參數可以傳一個callback,最後執行callback,callback里的參數對應前面導出的模塊對象,這裡main沒有導出對象,所以m={},$就是我們所熟知的jquery對象$。

exports其實就是module.exports的一個引用,我們用的多的就是module.exports了。

這就是國人開發的seajs,CMD規範的簡單使用,有了這個,我們就可以告別使用來引入腳本帶來的一系列問題了。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 編程小哥 的精彩文章:

TAG:編程小哥 |