国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

JavaScript 模塊化開發(fā)實(shí)例詳解【seajs、requirejs庫(kù)使用】

瀏覽:2日期:2023-10-27 18:47:18

本文實(shí)例講述了JavaScript 模塊化開發(fā)。分享給大家供大家參考,具體如下:

JS開發(fā)的問題

沖突

依賴

JS引入的文件,產(chǎn)生依賴.

使用命名空間解決:

命名空間的弊端

調(diào)用的時(shí)候 名字比較長(zhǎng).

只能減低沖突,不能完全避免

SeaJs使用

引入sea.js的庫(kù)

如何變成模塊? define

如何調(diào)用模塊? exports 和 seajs.use

如何依賴模塊? require

//html:<script src='http://www.cgvv.com.cn/bcjs/js/sea.js' type='text/javascript' charset='utf-8'></script><script type='text/javascript'>// console.log( seajs );seajs.use(’./js/main.js’,function ( main ) { main.show(); });</script>

//main.jsdefine(function ( require,exports,module ) { var header = require(’./header.js’); function show () {alert(123); } exports.show = show; });seajs.use()

加載一個(gè)或多個(gè)模塊

// 加載一個(gè)模塊seajs.use(’./main.js’);// 加載一個(gè)模塊,在加載完成時(shí),執(zhí)行回調(diào)seajs.use(’./main.js’, function ( main ) { });// 加載多個(gè)模塊,在加載完成時(shí),執(zhí)行回調(diào)seajs.use([’./main.js’, ’./b’], function(a, b) { a.doSomething(); b.doSomething();});

seajs.use 與 DOM ready 事件沒有任何關(guān)系。如果某些操作要確保在 DOM ready 后執(zhí)行,需要使用 jquery 等類庫(kù)來保證。

seajs.use([’jquery’,’./main’],function ( $,main ) { $(function () { main.init(); })});

use方法第一個(gè)參數(shù)一定要有,但是可以是null,也可以是一個(gè)變量

var app = [’app.js’, ’header.css’, ’header.js’];seajs.use(app, function( app ) { //do something});

seajs.use() 只用于加載啟動(dòng), 不應(yīng)該出現(xiàn)在define的模塊代碼中,如果模塊代碼里需要加載其它模塊時(shí),使用 require() ,需要加載異步其它異步模塊時(shí),使用 require.async()

seajs.use 是模塊加載器必備的一個(gè)接口

define函數(shù)

當(dāng)傳遞一個(gè)參數(shù)時(shí)候,那么這個(gè)參數(shù)就是一個(gè)模塊,參數(shù)可以是任意類型傳遞一個(gè)字符串,那么這個(gè)模塊就是一個(gè)字符串模塊傳遞一個(gè)對(duì)象的時(shí)候,那么這個(gè)模塊就是一個(gè)對(duì)象模塊

傳遞一個(gè)函數(shù)(最常用的方式) 這函數(shù)自帶三個(gè)參數(shù)Require:引用其他模塊的工廠方法Exports:返回的接口對(duì)象Module:模塊module屬性

當(dāng)傳遞過參數(shù)時(shí)(兩個(gè),或者三個(gè))如果傳遞兩個(gè)參數(shù)的時(shí)候,第一個(gè)該模塊依賴的模塊數(shù)組集合,最后一個(gè)參數(shù)是function如果傳遞三個(gè)參數(shù)的時(shí)候,第一個(gè)表示該模塊的名稱,第二個(gè)參數(shù)表示該模塊依賴的模塊集合,第三個(gè)

//第一個(gè)參數(shù),當(dāng)前模塊的ID,也就是當(dāng)前模塊的地址//第二個(gè)參數(shù),以來模塊的地址的數(shù)組define(’./main.js’,[’./drag.js’],function( require,exports,moduels ){ });

三個(gè)參數(shù)解釋

require

require不能簡(jiǎn)寫

require不能被重定義 不能賦值:var req = require 不能定義函數(shù):function require 不能被子函數(shù)當(dāng)成參數(shù) 不能在子函數(shù)作用域內(nèi)重定義

// 錯(cuò)誤 - 重命名 'require'! var req = require, mod = req('./mod');

// 錯(cuò)誤 - 重定義 'require'! require = function() {};

// 錯(cuò)誤 - 重定義 'require' 為函數(shù)參數(shù)! function F(require) {}

// 錯(cuò)誤 - 在內(nèi)嵌作用域內(nèi)重定義了 'require'! function F() {

var require = function() {};

}

require的參數(shù)只能是完整的字符串 require(‘a(chǎn)bc’ + ‘bcd’)是不允許的

exports

模塊的接口

第一種,直接對(duì)exports添加屬性,如exports.color = ’red’

第二種,通過module來定義,module.exports.color = ’red’

第三種,通過module來定義,module.exports = {color: ’orange’}

第四種,通過return來定義, return {color: ’green’}

在一個(gè)模塊中定義接口時(shí)候要用一種方式,不能混用

注意,不可以直接對(duì)exports賦值新對(duì)象

module

模塊的屬性

id:表示模塊的id

uri:表示該模塊文件對(duì)應(yīng)的url

exports:表示模塊返回的接口集合

dependencies:表示依賴模塊集合(數(shù)組表示形式)

deps:表示依賴模塊集合(對(duì)象表示形式)

CMD 模塊定義規(guī)范

一個(gè)模塊就是一個(gè)文件

define 是一個(gè)全局函數(shù), 用來定義模塊

define( facotry )

facotry可以是一個(gè)函數(shù),也可以是一個(gè)對(duì)象或字符串

definde( { color: ’tan’ } );

當(dāng)參數(shù)為 函數(shù)時(shí)。 默認(rèn)會(huì)有三個(gè)參數(shù) :require,exports,module

definde( function ( require,exports,module ) { } );define ([id,deps],factory)

define 也可以接受兩個(gè)以上的參數(shù),字符串id表示模塊標(biāo)識(shí)。deps是模塊依賴。

define(’main’,[’mina.js’],function ( require,exports,module ) { //模塊代碼});

id ,deps 參數(shù)省略,可以通過構(gòu)建工具自動(dòng)生成。id和 deps 參數(shù), 不屬于CMD規(guī)范。

require function

require 是一個(gè)方法,接受 模塊標(biāo)識(shí) 作為唯一參數(shù),用來獲取其他模塊提供的接口。

deifne(function ( requrie,exports ) { //獲取模塊 main 的接口 var main = require(’./main’); //調(diào)用 模塊 main 中的定義方法 main.init();});

require.async(id,[cb]); 模塊內(nèi)部異步加載模塊,并在加載完成后執(zhí)行指定的回調(diào)函數(shù)。

require.async(’./a’,function(){});//加載多個(gè)異步模塊require.async([’./a’,’./b’],function(){});

//異步加載 所需要的模塊define(function ( require,expotrs,module ) { var loadSync = false; if ( loadSync ) { var skin = require.async(’./skin’); } else { var header = require.async(’./header’); }});exports

exports , 用來向外提供模塊接口

define(function ( require, exports,module ) { // 對(duì)外提供 foo 屬性 exports.color = ’pink’; // 對(duì)外提供 doSomething 方法 exports.doSomething = function() {};});

通過return 提供接口

define(function () { //通過 return 直接提供接口 return { color: ’deeppink’, sayName: function () {} }});

CMD模塊中,經(jīng)常使用的API 有:define,require,require.async,exports,module.expotrs

seajs 配置seajs.config()alias

定義模塊別名當(dāng)引用一些基礎(chǔ)庫(kù)的時(shí)候,涉及到基礎(chǔ)庫(kù)升級(jí),在alias中定義這個(gè)模塊時(shí),修改只需要修改這個(gè)別名配置。

seajs.config({ alias: { jquery: ’lib/jquery.1.10.1’ }});

模塊中使用

require(’jquery’);paths

定義模塊路徑一些模塊創(chuàng)建目錄結(jié)構(gòu)很深的時(shí)候,可以將這個(gè)層級(jí)定義成一個(gè)簡(jiǎn)寫的path, 引用這個(gè)模塊的時(shí)候,直接通過 pathName+模塊名稱。

seajs.config({

paths: { hd: ’./modules/header’}

});

模塊中使用

require(’hd/header.js’);vars

在某些情況下,模塊路徑在運(yùn)行時(shí)才能確定,可以使用 vars 變量來配置。

seajs.config({ vars: { skin: ’header/skin’ }});

模塊中使用

require(’{skin}/skin.js’); //需要使用 {} 來標(biāo)識(shí)map

映射配置,匹配文件,做映射處理開發(fā)完一些模塊時(shí)候,需要打包或壓縮處理,此時(shí)文件名可能會(huì)不同,可以通過map映射,來找到這個(gè)文件,修改成對(duì)應(yīng)的文件名

seajs.config({ map: [ [’main.js’,’main-min.js’] ]});seajs.use([’main’],function ( main ) { // do ...});base

設(shè)置模塊的根目錄有時(shí)候開發(fā)用seajs不一定在當(dāng)前頁(yè)面目錄下,此時(shí)想引用這個(gè)模塊比較麻煩,可以通過base來重定義該頁(yè)面模塊文件根目錄。

charset

設(shè)置模塊的編碼格式

seajs.config({ charset: ’utf-8’});

seajs.config({ charset: function(url) { // xxx 目錄下的文件用 gbk 編碼加載 if (url.indexOf(’http://example.com/js/xxx’) === 0) { return ’gbk’; } // 其他文件用 utf-8 編碼 return ’utf-8’; }});

常用的配置項(xiàng): alias,paths,base

seajs插件seajs-preload.js

<script type='text/javascript' src='http://www.cgvv.com.cn/bcjs/js/lib/seajs-preload.js'></script>加載js文件

seajs.config({ //預(yù)加載jquery文件 preload: [’jquery.js’]});

模塊中文件使用

definde(function ( require,exports,module ) { $(document).css(’background’,’tan’);});seajs-css.js

加載css文件

<script type='text/javascript' src='http://www.cgvv.com.cn/bcjs/js/seajs-css.js'></script>

definde(function ( require,expotrs,module ) { require(’../css/css.css’);});requireJs

引入模塊文件時(shí)候,requirejs是根據(jù)引用了require文件的script標(biāo)簽中data-main屬性對(duì)應(yīng)的文件所在的目錄

define定義模塊

傳遞一個(gè)對(duì)象可以傳遞一個(gè)函數(shù)(commonjs規(guī)范的實(shí)現(xiàn))區(qū)別 在于module

id表示模塊的id,id沒有后綴名(注意:seajs有后綴名) 沒有依賴的模塊集合config配置屬性

模塊接口

在AMD規(guī)范定義的模塊中,沒有exports參數(shù),只能通過return將接口暴露出來。

return 對(duì)象,這種方式可以將模塊內(nèi)部多個(gè)屬性多個(gè)方法暴露出來。

return 方法,這種方式將一個(gè)方法返回出來,引用這個(gè)模塊就是引用這個(gè)接口方法,在它父模塊(引用它的模塊中)可以直接調(diào)用該方法。是在自己模塊的作用域中。

requirejs配置baseUrl

設(shè)置根目錄用途:有時(shí)候啟動(dòng)文件不在預(yù)期的位置,可以通過baseUrl來設(shè)置根目錄

require.config({ baseUrl: ’lib’});paths

簡(jiǎn)寫路徑

require.config({ paths: { hd: ’module/header’ }});map

當(dāng)存在多個(gè)頁(yè)面,可能每個(gè)頁(yè)面引用代碼庫(kù)不一樣,可以通過map進(jìn)行配置,對(duì)每個(gè)文件配置不同的代碼庫(kù)文件。

require.config({ map: { //modules 模塊下的dom模塊引用的是lib/dom ’modules’: { ’dom’: ’lib/dom’ }, //modules-new 模塊下的dom模塊引用的是lib/dom.2.0 ’modules-new’: { ’dom’: ’lib/dom.2.0’ } }});

使用css插件

requireJs 加載css 插件

//配置require.config({ map: { ’*’: { ’css’: ’lib/css’ } }});

//使用 define([’css!css/index.css’],function () {});shim

表示配置模塊依賴關(guān)系對(duì)于一些定義在全局作用域下的代碼庫(kù),常常獲取不到這類庫(kù)的模塊,此時(shí)通過定義shim的莫開依賴關(guān)系,可以在模塊中獲取到這類代碼庫(kù)。

require.config({ shim: { ’lib/jquery’: { //依賴的模塊集合 deps: [], expotrs: ’$’ } }});

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 欧美日产国产亚洲综合图区一 | 亚洲影视一区二区 | 91久久国产精品 | 久久精品国产精品亚洲精品 | 欧美日韩在线看 | 亚洲最大看欧美片网站 | 男子操女子 | 国产一级做a爰片久久毛片男 | 97超级碰碰碰久久久观看 | 一级一级特黄女人精品毛片 | 亚洲精品国产一区二区三区四区 | 黄网在线 | a色毛片免费视频 | 免费人成黄页网站在线观看国产 | 国产a级高清版毛片 | 免费一区二区三区久久 | 精品三级内地国产在线观看 | 国产高清美女一级a毛片久久 | 欧美自拍视频 | 亚欧国产| 国产欧美久久久另类精品 | 日本视频播放免费线上观看 | 国产在线99| 亚洲精品国产成人99久久 | 久久成人精品免费播放 | 亚洲国产精品久久网午夜 | 久久亚洲成人 | 全免费a级毛片免费看 | 国产女王s调视频vk 国产女王vk | 国产成人综合自拍 | 日日摸日日碰夜夜97 | 亚洲综合网在线观看首页 | 国产欧美视频综合二区 | 国产成人亚洲精品老王 | 最新欧美精品一区二区三区 | 午夜精品视频 | 欧美一区二区三区在线视频 | 免费观看成人毛片 | 国产综合13p| 亚洲国产欧美在线人成 | 欧美另类自拍 |