亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

JavaScript模塊化開發之SeaJS

2024-05-06 16:26:14
字體:
來源:轉載
供稿:網友
SeaJS是一個遵循CommonJS規范的JavaScript模塊加載框架,可以實現JavaScript的模塊化開發及加載機制,本文給大家介紹JavaScript模塊化開發之SeaJS,需要的朋友參考下
 

前言

  SeaJS是一個遵循CommonJS規范的JavaScript模塊加載框架,可以實現JavaScript的模塊化開發及加載機制。使用SeaJS可以提高JavaScript代碼的可讀性和清晰度,解決目前JavaScript編程中普遍存在的依賴關系混亂和代碼糾纏等問題,方便代碼的編寫和維護。

SeaJS本身遵循KISS(Keep it Simple,Stupid)理念進行開發,后續的幾個版本更新也都是吵著這個方向邁進。

如何使用SeaJS

下載及安裝在這里不贅述了,不了解的請查詢官網。

基本開發原則
 •一切皆為模塊:SeaJS中的模塊概念有點類似于面向對象中的類--模塊可以擁有數據和方法,數據和方法可以定義為公共或私有,公共數據和方法可以供別的模塊調用。

 •每個模塊應該都定義在一個單獨的js文件中,即一個對應一個模塊。

模塊的定義和編寫

模塊定義函數define

SeaJS中使用define函數定義一個模塊。define可以接收三個參數:

/*** Defines a module.* @param {string=} id The module id.* @param {Array.|string=} deps The module dependencies.* @param {function()|Object} factory The module factory function.*/fn.define = function(id, deps, factory) {  //code of function…}

define可以接收的參數分別是模塊ID,依賴模塊數組及工廠函數。

 •如果只有一個參數,則賦值給factory

 •如果有兩個參數,第二個賦值給factory,第一個如果是數組則賦值給deps,否則賦值給id

•如果有三個參數,則分別賦值

但是,包括SeaJS官網示例在內幾乎所有用到define的地方都只傳遞一個工廠函數進去,類似于如下代碼:

define(function(require,exports,module){  //code of the module}) 

個人建議遵循SeaJS官方示例的標準,用一個參數的define定義模塊。那么id和deps會怎么處理呢?

  id是一個模塊的標識字符串,define只有一個參數時,id會被默認賦值為此js文件的絕對路徑。如example.com下的a.js文件中使用define定義模塊,則這個模塊的ID會賦值為 http://example.com/a.js ,沒有特別的必要建議不要傳入id。deps一般也不需要傳入,需要用到的模塊用require加載即可。

工廠函數factory解析

  工廠函數是模塊的主體和重點。它的三個參數分別是:

 •require:模塊加載函數,用于記載依賴模塊
 •exports:接口點,將數據或方法定義在其上則將其暴露給外部調用
 •module:模塊的元數據

這三個參數可以根據需要選擇是否需要顯示指定。

module是一個對象,存儲了模塊的元信息,具體如下:
 •module.id:模塊的ID
 •module.dependencies:一個數組,存儲了此模塊依賴的所有模塊的ID列表。
 •module.exports:與exports指向同一個對象

三種編寫模塊的模式

第一種是基于exports的模式:

define(function(require,exports,module){  var a=require('a');  var b=require('b'); //引入模塊  var data1=1; //私有數據  var fun1=function(){//私有方法    return a.run(data1);  }  exports.data2=2; //公有數據  exports.fun2=function(){    return 'hello';  }})

上面是一種比較“正宗”的模塊定義模式。除了講公共數據和方法附加在exports上,也可以直接返回一個對象表示模塊,如下面的代碼與上面的代碼功能相同:

define(function(require){  var a=require('a');  var b=require('b'); //引入模塊  var data1=1;  var fun1=function(){    return a.run(data1);  }  return{    data2:2,    fun2:function(){      return 'hello';    }  }})

如果模塊定義沒有其他代碼,只返回一個對象,還可以有如下簡化寫法:

define({  data2:2,    fun2:function(){      return 'hello';    }  }) 

第三種寫法對于定義純JSON數據的模塊非常合適。

根據應用場景的不同,SeaJS提供了三個載入模塊的API,分別是:seajs.use,require和require.async。

seajs.use

seajs.use主要用于載入入口模塊。入口模塊相當于C語言的main函數,同時也是整個模塊依賴樹的根。seajs.use
 的用法如下:

//第一模式seajs.use('./a');//回調模式seajs.use('./a',function(a){  a.run();})//多模塊模式seajs.use(['./a','./b'],function(a,b){  a.run();  b.run();}) 

其中多模塊的用法和KISSY中的模塊加載方法類似,不虧是一個人寫的??!

 一般seajs.use只用在頁面載入入口模塊,SeaJS會順著入口模塊解析所有依賴模塊并將它們加載。如果入口模塊只有一個,也可以通過給引入seajs的script標簽加入“data-main”屬性來省略seajs.use,例如一下寫法:

<!DOCTYPE HTML><html lang="zh-CN"><head>  <meta charset="UTF-8">  <title>TinyApp</title></head><body>  <p class="content"></p>  <script src="./sea.js" data-main="./init"></script></body></html> require

require是seajs主要的模塊加載方法,當在一個模塊中需要用到其他模塊時一般用require加載:

var m=require('./a'); require.async

上文說過seajs會在html頁面打開時通過靜態分析一次性記載所有需要的js文件,如果想要某個js文件在用時才加載,可以使用require.async。

 這樣只有在用到這個模塊時,對應的js文件才會被下載,也就實現了JavaScript代碼的按需加載。

SeaJS的全局配置

seajs提供了一個seaj.configd的方法可以設置全局配置,接收一個表示全局配置的配置對象,具體方法如下:

seajs.config({base:'path',alias:{  'app':'path/app/'},charset:'utf-8',timeout:20000,debug:false})

其中,

 •base表示基址路徑
 •alias可以對較長的常用路徑設置縮寫
 •charset表示下載js時script標簽的charset屬性。
 •timeout表示下載文件的最大時長,以毫秒為單位。

Seajs如何與現有的JS庫配合使用

要將現有的JS庫與seajs一起使用,只需根據seajs的模塊定義規則對現有庫進行一個封裝。例如,下面是對jQuery的封裝方法:

define(function(){  /*  此處為jquery源碼  */  }) 

一個完整的例子:

 上文說了那么多,知識點比較分散,所以最后我打算用一個完整的SeaJS例子把這些知識點串起來,方便朋友們歸納回顧。這個例子包含如下文件:
 •index.html 主頁面

 •sea.js
 •jquery.js
 •init.js init模塊,入口模塊,依賴data、jquery、style三個模塊,又主頁面載入
 •data.js data模塊,純json數據模塊
 •style.css css樣式表

html:<!DOCTYPE HTML><!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title>Title</title></head><body><div id="content">  <p class="author"></p>  <p class="blog"><a href="#">Blog</a></p></div><script src="sea.js"></script><script>    seajs.use('init');</script></body></html> javascript://init.jsdefine(function(require, exports, module) {  var $ = require('./jquery');  var data = require('./data');  var css = require('./style.css');  $('.author').html(data.author);  $('.blog').attr('href', data.blog);});//data.jsdefine({  author: 'ZhangYang',  blog: 'http://blog.codinglabs.org'}); css:.author{color:red;font-size:10pt;}.blog{font-size:10pt;} 

請注意:

1.請講jquery.js源碼文件包含在seajs模塊加載代碼中;

2.在Sea.js < 2.3.0版本之前是可以加載css文件的,新版本中此功能移除,為了兼容考慮,加載css功能將作為一個插件存在。

使用方法

 •可以在sea.js標簽后引入這個插件使用
 •也可以將插件代碼混入sea.js當中
 •和seajs-style的區別 •seajs-css是使 Sea.js 能夠加載一個css文件,和link標簽一樣
 •seajs-style是指提供一個seajs.importStyle方法用于加載一段 css 字符串

以上內容是小編給大家分享的JavaScript模塊化開發之SeaJS,希望對大家學習javascript模塊化開發有所幫助,謝謝大家一直以來對腳本之家網站的支持。!



注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品扒开腿爽爽爽视频| 国产视频自拍一区| 亚洲精品午夜精品| 国产美女主播一区| 国模gogo一区二区大胆私拍| 日韩欧美在线播放| 欧美色视频日本版| 国产精品www色诱视频| 欧美激情网友自拍| 国产欧美最新羞羞视频在线观看| 国产亚洲视频在线观看| 欧美极品在线播放| 日韩成人激情影院| 久久久久久一区二区三区| 亚洲人成亚洲人成在线观看| 91沈先生在线观看| 中文字幕精品网| 亚洲人午夜精品免费| 久久久久女教师免费一区| 精品爽片免费看久久| 91福利视频网| 日韩大陆毛片av| 伊人av综合网| 久久青草福利网站| 亚洲福利在线观看| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲大尺度美女在线| 久久99久久久久久久噜噜| 最近中文字幕mv在线一区二区三区四区| 国产成人拍精品视频午夜网站| 国产精欧美一区二区三区| 2018国产精品视频| 中文字幕亚洲综合久久筱田步美| 欧美高清视频在线播放| 欧美精品18videos性欧美| 亚洲欧美日韩天堂一区二区| 精品激情国产视频| 国产精品福利网站| 亚洲欧美一区二区三区四区| 亚洲成人中文字幕| 久99九色视频在线观看| 日本19禁啪啪免费观看www| 在线丨暗呦小u女国产精品| 91免费人成网站在线观看18| 欧美激情欧美狂野欧美精品| 在线播放日韩av| 欧洲永久精品大片ww免费漫画| www.亚洲人.com| 日韩高清电影好看的电视剧电影| 久久久噜噜噜久久中文字免| 狠狠色狠狠色综合日日小说| 亚洲在线第一页| 亚洲免费视频一区二区| 久久99精品视频一区97| 亚洲精品福利免费在线观看| 亚洲人成绝费网站色www| 国产成人精品在线播放| 日韩一区二区精品视频| 成人a级免费视频| 91精品久久久久久久久| 亚洲视频第一页| 97免费中文视频在线观看| 日韩欧美精品网址| 精品激情国产视频| 国产精品综合网站| 亲子乱一区二区三区电影| 日韩在线免费观看视频| 国产丝袜一区二区三区免费视频| 久久精品国产亚洲精品2020| 国产精品久久中文| 国产精品精品视频| 久久天天躁狠狠躁老女人| 国产91在线播放精品91| 日韩中文视频免费在线观看| 青青草99啪国产免费| 国产一区二区三区丝袜| 韩国精品久久久999| 欧美有码在线观看| 亚洲人成在线一二| 国产日韩欧美日韩大片| 久久久亚洲欧洲日产国码aⅴ| 久久精品国产96久久久香蕉| 欧美成人精品在线| 国产日本欧美视频| 综合136福利视频在线| 国产精品日韩欧美大师| 精品免费在线观看| 狠狠色狠色综合曰曰| 国产日产欧美精品| 欧美在线视频一区二区| 精品欧美一区二区三区| 日日骚久久av| 91免费看片在线| 国产亚洲人成a一在线v站| 日韩欧美亚洲成人| 国产视频精品久久久| 国产精品偷伦免费视频观看的| 欧美黄色免费网站| 国产精品爽黄69天堂a| 九九视频这里只有精品| 日韩精品视频免费专区在线播放| 日韩中文字幕久久| 国产精品一区二区久久久久| 日韩高清av一区二区三区| 色香阁99久久精品久久久| 91影视免费在线观看| 国产午夜一区二区| 亚洲第一区第一页| 91日本视频在线| 国产自摸综合网| 中文字幕v亚洲ⅴv天堂| 热久久这里只有精品| 91欧美精品成人综合在线观看| 5278欧美一区二区三区| 亚洲欧美综合区自拍另类| 久久亚洲国产精品成人av秋霞| 亚洲 日韩 国产第一| 97成人精品区在线播放| 日韩电影中文字幕| 亚洲欧美日本伦理| 久久成年人免费电影| 日韩在线观看免费网站| 欧美性猛交xxxx偷拍洗澡| 在线观看久久av| 91av视频在线| 欧美大奶子在线| 91久久久久久国产精品| 亚洲精品福利资源站| 色噜噜狠狠色综合网图区| 在线观看亚洲区| 日韩av在线影视| 成人午夜两性视频| 国产一区二区三区在线| 亚洲天堂av高清| 成人综合国产精品| 日韩电影中文字幕av| 久久精品在线视频| 中文字幕一区二区三区电影| 亚洲精品美女在线观看播放| 中文字幕精品www乱入免费视频| 午夜精品一区二区三区在线| 国产精品一区久久| 久久精品国产一区二区电影| 日本精品久久久| 亚洲国产天堂网精品网站| 亚洲一区制服诱惑| 在线视频欧美日韩| 欧美在线欧美在线| 亚洲综合色激情五月| 久久偷看各类女兵18女厕嘘嘘| 91精品国产成人| 久久久免费观看视频| 国产专区欧美专区| 国产在线不卡精品| 亚洲精选中文字幕| 97国产一区二区精品久久呦| www亚洲精品| 亚洲高清一区二| 国产精品扒开腿做爽爽爽视频| 欧美日韩美女在线| 日韩一二三在线视频播| 欧美日韩一区二区在线播放| 日韩欧美国产高清91| 91精品久久久久久久久久另类|