seajs和requirejs模塊化簡單案例分析
本文實(shí)例講述了seajs和requirejs模塊化。分享給大家供大家參考,具體如下:
如今,webpack、gulp等構(gòu)件工具流行,有人說seajs、requirejs等純前端的模塊化工具已經(jīng)被淘汰了,我不這么認(rèn)為,畢竟純前端領(lǐng)域想要實(shí)現(xiàn)模塊化就官方來講,還是有一段路要走的。也因此純前端的模塊化工具依然有價(jià)值,而且就我了解一些中小企業(yè)一直都在用純前端的模塊化手段。
如今,重新關(guān)注seajs和requirejs,不求理解多么深刻,要求會(huì)用能用就可以。
模塊化的起因是傳統(tǒng)的直接引入js方法存在問題:
- 必須通過全局變量共享模塊,有可能會(huì)出現(xiàn)命名沖突的問題;
- 依賴的文件必須手動(dòng)地使用標(biāo)簽引入到頁面中。
下面是seajs和requirejs的簡單案例。
seajs 我用的seajs版本是2.2.3
html部分
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>極客學(xué)院首頁</title> </head> <body> <button id="testbtn0">測試按鈕0</button> <button id="testbtn1">測試按鈕1</button> <script type="text/javascript" src="./js/sea.js"></script> <script type="text/javascript"> seajs.use('./js/main'); </script> </body> </html>
main.js文件
define(function(require,exports,module){ //引入兩個(gè)js文件 require("test0"); require("test1"); })
test0.js
define(function(require,exports,module){ var $$=require("common").$$; var testbtn0=$$("#testbtn0"); testbtn0.addEventListener("click",function(e){ alert(e.target.innerText); }); })
test1.js
define(function(require, exports, module) { var $$ = require("common").$$; var testbtn1 = $$("#testbtn1"); testbtn1.addEventListener("click", function(e) { alert(e.target.innerText); }); })
coomm.js
define(function(rerquire,exports,module){ /*//第一種導(dǎo)出方案 exports.$$=function(tag){ return document.querySelector(tag); }*/ //第二種導(dǎo)出方案 module.exports={ $$:function(tag){ return document.querySelector(tag); }, test:"測試數(shù)據(jù)" } //第三種導(dǎo)出方案 /* return { $$:function(tag){ return document.querySelector(tag); }, test:"測試數(shù)據(jù)" }*/ })
以上是為seajs的,而requirejs的直接就是該一下html文件就可以了,真是哭笑不得啊。才發(fā)現(xiàn)二者是通過的。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>極客學(xué)院首頁</title> </head> <body> <button id="testbtn0">測試按鈕0</button> <button id="testbtn1">測試按鈕1</button> <script type="text/javascript" data-main="./js/main" src="./js/require.js"></script> </body> </html>
關(guān)于導(dǎo)出接口有三種,分別是exports,用來導(dǎo)出變量;然后是module.exports用于導(dǎo)出對(duì)象;最后是return直接返回。
最后對(duì)seajs和requirejs的不通點(diǎn)做個(gè)總結(jié),選擇seajs作者github:
- 定位有差異。RequireJS 想成為瀏覽器端的模塊加載器,同時(shí)也想成為 Rhino / Node 等環(huán)境的模塊加載器。Sea.js 則專注于 Web 瀏覽器端,同時(shí)通過 Node 擴(kuò)展的方式可以很方便跑在 Node 環(huán)境中。
- 遵循的規(guī)范不同。RequireJS 遵循 AMD(異步模塊定義)規(guī)范,Sea.js 遵循 CMD (通用模塊定義)規(guī)范。規(guī)范的不同,導(dǎo)致了兩者 API 不同。Sea.js 更貼近 CommonJS Modules/1.1 和 Node Modules 規(guī)范。
- 推廣理念有差異。RequireJS 在嘗試讓第三方類庫修改自身來支持 RequireJS,目前只有少數(shù)社區(qū)采納。Sea.js 不強(qiáng)推,采用自主封裝的方式來“海納百川”,目前已有較成熟的封裝策略。
- 對(duì)開發(fā)調(diào)試的支持有差異。Sea.js 非常關(guān)注代碼的開發(fā)調(diào)試,有 nocache、debug 等用于調(diào)試的插件。RequireJS 無這方面的明顯支持。
- 插件機(jī)制不同。RequireJS 采取的是在源碼中預(yù)留接口的形式,插件類型比較單一。Sea.js 采取的是通用事件機(jī)制,插件類型更豐富。
個(gè)人總結(jié)的不同是:
CMD,seajs 推崇依賴就近,AMD ,requirejs推崇依賴前置,實(shí)際是兩者在簡單實(shí)現(xiàn)上,是可以一致的。就比如本文的例子。
seajs比如requirejs小很多。
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- 在Html中使用Requirejs進(jìn)行模塊化開發(fā)實(shí)例詳解
- 使用requirejs模塊化開發(fā)多頁面一個(gè)入口js的使用方式
- 詳解JavaScript模塊化開發(fā)
- JavaScript的模塊化開發(fā)框架Sea.js上手指南
- Seajs 簡易文檔 提供簡單、極致的模塊化開發(fā)體驗(yàn)
- JavaScript模塊化開發(fā)之SeaJS
- 了解Javascript的模塊化開發(fā)
- javascript 構(gòu)建模塊化開發(fā)過程解析
- 深入探尋seajs的模塊化與加載方式
- 基于RequireJS和JQuery的模塊化編程日常問題解析
- 基于RequireJS和JQuery的模塊化編程——常見問題全面解析
- JavaScript 模塊化開發(fā)實(shí)例詳解【seajs、requirejs庫使用】
相關(guān)文章
js console.log打印對(duì)像與數(shù)組用法詳解
這篇文章主要介紹了js console.log打印對(duì)像與數(shù)組用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了js使用console.log實(shí)現(xiàn)打印對(duì)象與數(shù)組的具體實(shí)現(xiàn)步驟與相關(guān)技巧,需要的朋友可以參考下2016-01-01BootStrap Table對(duì)前臺(tái)頁面表格的支持實(shí)例講解
bootstrap-table是在bootstrap的基礎(chǔ)上面做了一些封裝,所以在使用bootstrap-table之前要導(dǎo)入的js和css,下面通過本文給大家詳細(xì)介紹需要引入的文件,對(duì)bootstrap table 表格感興趣的朋友一起看看吧2016-12-12JavaScript獲取移動(dòng)設(shè)備型號(hào)的實(shí)現(xiàn)代碼(JS獲取手機(jī)型號(hào)和系統(tǒng))
這篇文章主要介紹了JavaScript獲取移動(dòng)設(shè)備型號(hào)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2018-03-03用js實(shí)現(xiàn)多域名不同文件的調(diào)用方法
用js實(shí)現(xiàn)多域名不同文件的調(diào)用方法...2007-01-01JavaScript實(shí)現(xiàn)新年倒計(jì)時(shí)效果
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)新年倒計(jì)時(shí)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11