詳解require.js配置路徑的用法和css的引入
前端開(kāi)發(fā)在近一兩年發(fā)展的非常快,JavaScript作為主流的開(kāi)發(fā)語(yǔ)言得到了前所未有的熱捧。大量的前端框架出現(xiàn)了,這些框架都在嘗試著解決一 些前端開(kāi)發(fā)中的共性問(wèn)題,但是實(shí)現(xiàn)又不盡相同。通常一般的前端加載js文件都是這樣 :
<script type="text/javascript" src="js/js1.js"></script> <script type="text/javascript" src="js/js2.js"></script> <script type="text/javascript" src="js/js3.js"></script> <script type="text/javascript" src="js/js4.js"></script>
但是當(dāng)一個(gè)項(xiàng)目特別大的時(shí)候 引入的js文件就特別多,這樣看起來(lái)不雅觀,并且不高效,當(dāng)js文件多而大的時(shí)候,網(wǎng)頁(yè)下載就會(huì)出現(xiàn)超時(shí),導(dǎo)致網(wǎng)站響應(yīng)超時(shí),直接500,所以一個(gè)神奇的
js框架(js工具包)就出現(xiàn)了:require.js。
require.js主要解決兩個(gè)問(wèn)題:
1、實(shí)現(xiàn)js的異步加載,避免js太多加載響應(yīng)時(shí)間太多導(dǎo)致網(wǎng)站超時(shí),
2、管理模塊之間的依賴性,便于編寫與維護(hù)。
好了步入今天的正題,寫一個(gè)require.js用法的案例,供大家參考一下:
假設(shè)我們的項(xiàng)目有一個(gè)這樣的資源目錄:

第一步在index.html中引入已經(jīng)下載好的require.js
然后我們新建一個(gè)config.js來(lái)寫相應(yīng)的加在配置:
然后打開(kāi)config.js里面寫入代碼如下:
require.config({
baseUrl:'/data/points/',//配置基目錄
urlArgs:'v='+(new Date()).getTime(),//清楚緩存
paths:{
'css': 'libs/js/css.min',
'jquery': 'libs/js/jquery-1.11.1.min',
'vur': 'libs/js/vue.min',
'amazeui': 'libs/js/amazeui.min',
'color': 'libs/js/color.min'
},
shim:{
'amazeui':{
deps: ['jquery','css!libs/css/amazeui.min','css!style/common','css!style/footer'],
},
'color':{
deps:['css!libs/css/color.min']
}
}
});
其中加入css應(yīng)該用模塊的依賴性 也就是deps
deps:['css!libs/css/color.min'] 這里會(huì)優(yōu)先加在css這個(gè)模塊名下的文件(libs/js/css.min.js) 然后一個(gè) "!"后面緊接著在基目錄下加在libs/css/color.min.css
其中css.min.js這個(gè)是一個(gè)依賴模塊js,這里面是寫了一個(gè)加載css文件的方法,
具體css.min.js
define(
function () {
if (typeof window == "undefined")return {
load: function (n, r, load) {
load()
}
};
var head = document.getElementsByTagName("head")[0];
var engine = window.navigator.userAgent.match(/Trident\/([^ ;]*)|AppleWebKit\/([^ ;]*)|Opera\/([^ ;]*)|rv\:([^ ;]*)(.*?)Gecko\/([^ ;]*)|MSIE\s([^ ;]*)/) || 0;
var useImportLoad = false;
var useOnload = true;
if (engine[1] || engine[7])useImportLoad = parseInt(engine[1]) < 6 || parseInt(engine[7]) <= 9; else if (engine[2])useOnload = false; else if (engine[4])useImportLoad = parseInt(engine[4]) < 18;
var cssAPI = {};
cssAPI.pluginBuilder = "./css-builder";
var curStyle;
var createStyle = function () {
curStyle = document.createElement("style");
head.appendChild(curStyle)
};
var importLoad = function (url, callback) {
createStyle();
var curSheet = curStyle.styleSheet || curStyle.sheet;
if (curSheet && curSheet.addImport) {
curSheet.addImport(url);
curStyle.onload = callback
} else {
curStyle.textContent = '@import "' + url + '";';
var loadInterval = setInterval(function () {
try {
curStyle.sheet.cssRules;
clearInterval(loadInterval);
callback()
} catch (e) {
}
}, 10)
}
};
var linkLoad = function (url, callback) {
var link = document.createElement("link");
link.type = "text/css";
link.rel = "stylesheet";
if (useOnload)link.onload = function () {
link.onload = function () {
};
setTimeout(callback, 7)
}; else var loadInterval = setInterval(function () {
for (var i = 0; i < document.styleSheets.length; i++) {
var sheet = document.styleSheets[i];
if (sheet.href == link.href) {
clearInterval(loadInterval);
return callback()
}
}
}, 10);
link.href = url;
head.appendChild(link)
};
cssAPI.normalize = function (name, normalize) {
if (name.substr(name.length - 4, 4) == ".css")name = name.substr(0, name.length - 4);
return normalize(name)
};
cssAPI.load = function (cssId, req, load, config) {
(useImportLoad ? importLoad : linkLoad)(req.toUrl(cssId + ".css"), load)
};
return cssAPI
}
);
現(xiàn)在好了瀏覽器打開(kāi)index.html發(fā)現(xiàn)沒(méi)有把我們需要額外加在的加在進(jìn)來(lái),這個(gè)是為是么呢?好了,這里的話記得要在index.html的head下<script type="javascript/text" src="config.js"></script>后面調(diào)用require.js中的方法require,也就是加上這一句
<script type="javascript/text' >require['color']</script>//標(biāo)識(shí)調(diào)用配置中的color模塊
再次訪問(wèn)index.html好了完美出現(xiàn)我們想要的了。
如圖:
注意
index.html中引入的順序不能打亂
<script type="text/javascript" src="config.js"></script> <script type="text/javascript" src="require.js"></script> <script type="text/javascript">require(['color']);</script>
require.config()接受一個(gè)配置對(duì)象,這個(gè)對(duì)象除了有前面說(shuō)過(guò)的paths屬性之外,還有一個(gè)shim屬性,專門用來(lái)配置不兼容的模塊。具體來(lái)說(shuō),每個(gè)模塊要定義(1)exports值(輸出的變量名),表明這個(gè)模塊外部調(diào)用時(shí)的名稱;(2)deps數(shù)組,表明該模塊的依賴性。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解JS構(gòu)造函數(shù)中this和return
本文通過(guò)實(shí)例代碼給大家介紹了JS構(gòu)造函數(shù)中this和return,需要的朋友參考下吧2017-09-09
javascript 數(shù)組精簡(jiǎn)技巧小結(jié)
本文給大家分享了13個(gè)非常常用的JavaScript數(shù)組操作的小技巧,有需要的小伙伴可以來(lái)看看,個(gè)人十分推薦.2020-02-02
微信小程序?qū)崿F(xiàn)時(shí)間戳格式轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)時(shí)間戳格式轉(zhuǎn)換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
使用JavaScript實(shí)現(xiàn)檢測(cè)網(wǎng)頁(yè)是否為空閑狀態(tài)
最近開(kāi)發(fā)項(xiàng)目時(shí),常碰到“用戶在一定時(shí)間內(nèi)無(wú)任何操作時(shí),跳轉(zhuǎn)到某個(gè)頁(yè)面”的需求,所以本文就來(lái)使用JavaScript實(shí)現(xiàn)這一要求,需要的可以參考下2024-03-03
Javascript實(shí)現(xiàn)圖片懶加載插件的方法
最近由于公司項(xiàng)目需要,要利用Javascript實(shí)現(xiàn)圖片懶加載效果,嘗試起來(lái)發(fā)現(xiàn)并不難,于是將自己的實(shí)現(xiàn)過(guò)程分享出來(lái)給大家學(xué)習(xí)和參考,希望對(duì)有需要的朋友們帶來(lái)一定的幫助,感興趣的朋友們下面來(lái)一起看看吧。2016-10-10
微信小程序使用onreachBottom實(shí)現(xiàn)頁(yè)面觸底加載及分頁(yè)效果
小程序還沒(méi)有使用pc端的那種分頁(yè)格式,下面這篇文章主要給大家介紹了關(guān)于微信小程序使用onreachBottom實(shí)現(xiàn)頁(yè)面觸底加載及分頁(yè)效果的相關(guān)資料,需要的朋友可以參考下2022-10-10
JS使用遮罩實(shí)現(xiàn)點(diǎn)擊某區(qū)域以外時(shí)彈窗的彈出與關(guān)閉功能示例
這篇文章主要介紹了JS使用遮罩實(shí)現(xiàn)點(diǎn)擊某區(qū)域以外時(shí)彈窗的彈出與關(guān)閉功能,結(jié)合實(shí)例形式分析了javascript事件響應(yīng)及頁(yè)面元素屬性動(dòng)態(tài)操作彈出與關(guān)閉遮罩層相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-07-07

