詳解RequireJS按需加載樣式文件
樣式模塊化的好處
RequireJS被設(shè)計(jì)用來(lái)加載JavaScript模塊的,可是大家有沒(méi)有聯(lián)想到其實(shí)樣式文件可以進(jìn)行模塊化處理,那么問(wèn)題來(lái)了,RequireJS能不能像加載腳本文件一樣來(lái)加載樣式文件呢?
雖然RequireJS本身沒(méi)有實(shí)現(xiàn)這個(gè)功能,但官網(wǎng)推薦了一些常用的插件供我們使用,官網(wǎng)插件插件地址為:http://requirejs.org/docs/plugins.html,同時(shí)在github上也有社區(qū)大量貢獻(xiàn)的插件:https://github.com/jrburke/requirejs/wiki/Plugins
當(dāng)然除了引用第三方插件外,我們也可以動(dòng)手自己寫一個(gè)類似插件,不過(guò)我在這里要推薦一個(gè)很不錯(cuò)的樣式模塊加載器require-css,其官網(wǎng)地址為:https://github.com/guybedford/require-css。
那么我們?cè)賮?lái)談?wù)?,樣式模塊話的好處吧,和腳本模塊化一樣,樣式模塊化也可以做到按需加載,樣式依賴,不過(guò)對(duì)我來(lái)說(shuō)最大的好處是將腳本的管理放權(quán)到前端管理,為什么這么說(shuō)呢? 以前我們添加樣式文件都是通過(guò)link標(biāo)簽引入的,而被引入的文件基本上都是jsp、php等后臺(tái)文件,這樣對(duì)與后臺(tái)不太熟悉的人來(lái)說(shuō),如果樣式文件發(fā)生改變,都要麻煩后臺(tái)開發(fā)人員。但是最懂樣式的莫過(guò)于前端開發(fā)人員了。
require-css的使用介紹
下面我們通過(guò)一個(gè)簡(jiǎn)單的例子,來(lái)介紹下require-css的用法,首先下載require-css,去到上面給出的官網(wǎng)地址,在頁(yè)面的右下角點(diǎn)擊Download ZIP按鈕,下載完成后解壓,將css.js拷貝復(fù)制到項(xiàng)目中去。
這個(gè)簡(jiǎn)單示例的目錄如下所示:

假設(shè)我們的目的是,通過(guò)加載util模塊時(shí),頁(yè)面先加載其依賴的樣式文件1.css。這個(gè)需求我們經(jīng)常遇到,比如我們使用JqueryUI時(shí),在加載其腳本模塊時(shí),在頁(yè)面我們也會(huì)添加上link標(biāo)簽引入其相關(guān)的UI樣式文件。
首先我們?cè)趐roject.html中引入RequireJS和指定配置文件(main.js)的位置。期代碼如下所示:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>RequireJS簡(jiǎn)單示例</title> </head> <body> <p id="test">如何處理依賴問(wèn)題</p> <script src="scripts/lib/jquery-1.11.0.min.js"></script> <script src="scripts/require.js" data-main="scripts/main"></script> </body> </html>
我們進(jìn)入到main.js配置文件。main.js應(yīng)該是頁(yè)面的入口文件,在這個(gè)入口文件中,指定了入口文件需要加載的模塊,同事也設(shè)置了RequireJS某些具體參數(shù)。其代碼如下所示:
/*入口腳本*/
require.config({
baseUrl: "scripts/",
paths: {
"util": "helper/util"
},
waitSeconds: 15,
map: {
'*': {
'css': 'lib/css'
}
},
shim : {
'util': ['css!../style/1.css']
}
});
require(["util"], function(util) {
// todo
});
其中我們要特別注意map和shim的配置,"map"告訴RequireJS在任何模塊之前,都先載入這個(gè)模塊,這樣別的模塊依賴于css!../style/1.css這樣的模塊都知道怎么處理了,shim那時(shí)干什么用的呢?這這個(gè)示例中,他表示util這個(gè)模塊在加載之前需要先加載1.css這個(gè)樣式文件。當(dāng)然我們也可以在Util模塊里直接設(shè)置他的依賴,下面將會(huì)解釋。
下面我們來(lái)看看util模塊的代碼,代碼如下所示:
define(function(){
//alert("Hello RequireJS!!");
console.log($("#test").text());
});
這個(gè)模塊很簡(jiǎn)單,就是通過(guò)jQuery獲取頁(yè)面id為test的值。并且在瀏覽器的控制臺(tái)輸出來(lái)。這里你可能感覺(jué)有點(diǎn)奇怪。為什么你使用了jQuery但是在依賴數(shù)組中且沒(méi)有設(shè)置呢?正確的說(shuō),我們應(yīng)該這樣寫:
define(['jquery'],function(){
//alert("Hello RequireJS!!");
console.log($("#test").text());
});
我這樣做的目的是,用RequireJS打包時(shí),不要將jquery打包進(jìn)去,這樣就可以減少文件的大小了。還有一個(gè)上面提出的問(wèn)題,加入我不用shim這個(gè)配置時(shí),可以向依賴JQuery一樣,將樣式文件寫到define的依賴數(shù)組中去。其代碼如下:
define(['css!../style/1.css'],function(){
//alert("Hello RequireJS!!");
console.log($("#test").text());
});
不過(guò)你應(yīng)該一眼就能看出來(lái),那種寫法比較好吧,我比較推薦,將依賴寫到shim配置中去。
一切配置就緒,在瀏覽器中打開project.html頁(yè)面,運(yùn)行結(jié)果如圖所示:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 一篇文章掌握RequireJS常用知識(shí)
- 教你5分鐘學(xué)會(huì)用requirejs(必看篇)
- RequireJS入門一之實(shí)現(xiàn)第一個(gè)例子
- RequireJS多頁(yè)面應(yīng)用實(shí)例分析
- 在Html中使用Requirejs進(jìn)行模塊化開發(fā)實(shí)例詳解
- RequireJS使用注意細(xì)節(jié)
- 使用requirejs模塊化開發(fā)多頁(yè)面一個(gè)入口js的使用方式
- requirejs + vue 項(xiàng)目搭建詳解
- 在JavaScript應(yīng)用中使用RequireJS來(lái)實(shí)現(xiàn)延遲加載
- 使用RequireJS庫(kù)加載JavaScript模塊的實(shí)例教程
- RequireJS用法簡(jiǎn)單示例
相關(guān)文章
JS對(duì)象類型之Error錯(cuò)誤對(duì)象的用法詳解
error對(duì)象是JavaScript的原生對(duì)象,當(dāng)程序解析和運(yùn)行過(guò)程中發(fā)生了錯(cuò)誤,JS引擎就會(huì)自動(dòng)產(chǎn)生并拋出一個(gè)error對(duì)象的實(shí)例,并且程序會(huì)終止在錯(cuò)誤發(fā)生的地方,本文給大家介紹了JS Error錯(cuò)誤對(duì)象的用法,需要的朋友可以參考下2024-04-04
原生javascript實(shí)現(xiàn)的ajax異步封裝功能示例
這篇文章主要介紹了原生javascript實(shí)現(xiàn)的ajax異步封裝功能,結(jié)合完整實(shí)例形式分析了原生javascript實(shí)現(xiàn)的ajax異步交互函數(shù)與相應(yīng)的使用方法,需要的朋友可以參考下2016-11-11
javascript中json基礎(chǔ)知識(shí)詳解
本文主要介紹了json的基礎(chǔ)知識(shí)。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01
微信小程序 高德地圖路線規(guī)劃實(shí)現(xiàn)過(guò)程詳解
這篇文章主要介紹了微信小程序 路線規(guī)劃實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
前端無(wú)感知刷新token以及超時(shí)自動(dòng)退出實(shí)現(xiàn)方案
前端需要做到無(wú)感刷新token,即刷token時(shí)要做到用戶無(wú)感知,避免頻繁登錄,下面這篇文章主要給大家介紹了關(guān)于前端無(wú)感知刷新token以及超時(shí)自動(dòng)退出的實(shí)現(xiàn)方案,需要的朋友可以參考下2024-01-01
前端實(shí)現(xiàn)讀取word文件并將其原樣式展示的幾種方案
在前端直接讀取并原樣展示W(wǎng)ord文檔是一個(gè)相對(duì)復(fù)雜的任務(wù),因?yàn)閃ord文檔的格式(如.doc或.docx)與Web技術(shù)棧使用的格式(HTML、CSS)不兼容,這篇文章主要給大家介紹了關(guān)于前端實(shí)現(xiàn)讀取word文件并將其原樣式展示的幾種方案,需要的朋友可以參考下2024-08-08
Bootstrap模態(tài)框禁用空白處點(diǎn)擊關(guān)閉
這篇文章主要為大家詳細(xì)介紹了Bootstrap模態(tài)框禁用空白處點(diǎn)擊關(guān)閉的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
JavaScript標(biāo)準(zhǔn)對(duì)象_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了JavaScript標(biāo)準(zhǔn)對(duì)象的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06

