基于Require.js使用方法(總結(jié))
一、為什么要使用require.js
首先一個(gè)頁(yè)面如果在加載多個(gè)js文件的時(shí)候,瀏覽器會(huì)停止網(wǎng)頁(yè)渲染,加載文件越多,網(wǎng)頁(yè)失去響應(yīng)的時(shí)間就會(huì)越長(zhǎng);其次,由于js文件之間存在依賴(lài)關(guān)系,因此必須嚴(yán)格保證加載順序,當(dāng)依賴(lài)關(guān)系很復(fù)雜的時(shí)候,代碼的編寫(xiě)和維護(hù)都會(huì)變得困難。
require.js,就是為了解決這兩個(gè)問(wèn)題:
1. 實(shí)現(xiàn)js文件的異步加載,避免網(wǎng)頁(yè)失去響應(yīng);
2. 管理模塊之間的依賴(lài)性,便于代碼的編寫(xiě)和維護(hù)。
二、require.js的加載
第一步,去官網(wǎng)下載最新版本,直接放到頁(yè)面進(jìn)行加載
<script src="js/require.js"></script>
加載這個(gè)文件可能會(huì)導(dǎo)致網(wǎng)頁(yè)失去響應(yīng),可以將它放到頁(yè)面的底部加載,也可以這樣寫(xiě)
<script src="js/require.js" defer async="true" ></script>
async屬性表明這個(gè)文件需要異步加載,避免網(wǎng)頁(yè)失去響應(yīng)。IE不支持這個(gè)屬性,只支持defer,所以把defer也寫(xiě)上。
加載require.js以后,下一步就要加載我們自己的代碼了,也就是入口,可以叫主模塊,如果文件名叫main.js,寫(xiě)成下面這樣就可以了:
<script src="js/require.js" data-main="js/main"></script> .js后綴可以省略
三、主模塊的寫(xiě)法
如果主模塊依賴(lài)于jQuery可以這樣寫(xiě)
require(['jquery'], function ($){
alert($);
});
四、require.config()方法
require.config({
paths: {
"jquery": "jquery.min",
"underscore": "underscore.min",
"backbone": "backbone.min"
}
});
上面的代碼給出了三個(gè)模塊的文件名,路徑默認(rèn)與main.js在同一個(gè)目錄(js子目錄)。如果這些模塊在其他目錄,比如js/lib目錄,則有兩種寫(xiě)法。
• 一種是逐一指定路徑
require.config({
paths: {
"jquery": "lib/jquery.min",
"underscore": "lib/underscore.min",
"backbone": "lib/backbone.min"
}
});
• 另一種則是直接改變基目錄(baseUrl)。
require.config({
baseUrl: "js/lib",
paths: {
"jquery": "jquery.min",
"underscor: "underscore.min",
"backbone": "backbone.min"
}
});
• 如果某個(gè)模塊在另一臺(tái)主機(jī)上,也可以直接指定它的網(wǎng)址,比如
require.config({
paths: {
"jquery": "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min"
}
});
五、AMD模塊的寫(xiě)法
require.js加載的模塊,采用AMD規(guī)范。也就是說(shuō),模塊必須按照AMD的規(guī)定來(lái)寫(xiě)。
具體來(lái)說(shuō),就是模塊必須采用特定的define()函數(shù)來(lái)定義。如果一個(gè)模塊不依賴(lài)其他模塊,那么可以直接定義在define()函數(shù)之中。
// math.js
define(function (){
var add = function (x,y){
return x+y;
};
return {
add: add
};
});
加載方法如下:
// main.js
require(['math'], function (math){
alert(math.add(1,1));
});
如果這個(gè)模塊還依賴(lài)其他模塊,那么define()函數(shù)的第一個(gè)參數(shù),必須是一個(gè)數(shù)組,指明該模塊的依賴(lài)性。
define(['myLib'], function(myLib){
function foo(){
myLib.doSomething();
}
return { //返回模塊中的函數(shù)
foo : foo
};
});
當(dāng)require()函數(shù)加載上面這個(gè)模塊的時(shí)候,就會(huì)先加載myLib.js文件。
六、加載非規(guī)范的模塊(shim的使用方式)
// app.js
function sayHello(name){
alert('Hi '+name);
}
// main.js
require.config({
shim: {
'app': { //這個(gè)鍵名為要載入的目標(biāo)文件的文件名,不能隨便命名。
exports: 'sayHello' //exports的值為my.js提供的 對(duì)外接口的名稱(chēng)
}
}
});
require(['app'], function(sayHello) {
alert(sayHello())
})
導(dǎo)出一個(gè)函數(shù),意味著我們得到了一個(gè)javaScript類(lèi)
但是如果在my.js中寫(xiě)了很多function,整合成一個(gè)function有點(diǎn)麻煩,想直接導(dǎo)出?方法如下:
// app.js
function sayHi(name){
alert('Hi '+name);
}
function sayHello(name){
alert('Hiello '+name);
}
// main.js
require.config({
shim: {
app: {
init: function() { //這里使用init將2個(gè)接口返回
return {
sayHi: sayHi,
sayHello: sayHello
}
}
}
}
});
require(['app'], function(a) {
a.sayHi('zhangsan');
a.sayHello('lisi');
});
shim的有序?qū)?br />
require.config({
shim: {
'jquery.ui.core': ['jquery'], //表示在jquery導(dǎo)入之后導(dǎo)入
'jquery.ui.widget': ['jquery'],
'jquery.ui.mouse': ['jquery'],
'jquery.ui.slider':['jquery']
},
paths : {
jquery : 'jquery-2.1.1/jquery',
domReady : 'require-2.1.11/domReady',
'jquery.ui.core' : 'jquery-ui-1.10.4/development-bundle/ui/jquery.ui.core',
'jquery.ui.widget' : 'jquery-ui-1.10.4/development-bundle/ui/jquery.ui.widget',
'jquery.ui.mouse' : 'jquery-ui-1.10.4/development-bundle/ui/jquery.ui.mouse',
'jquery.ui.slider' : 'jquery-ui-1.10.4/development-bundle/ui/jquery.ui.slider'
}
});
require(['jquery', 'domReady','jquery.ui.core','jquery.ui.widget','jquery.ui.mouse','jquery.ui.slider'], function($) {
$("#slider" ).slider({
value:0,
min: 0,
max: 4,
step: 1,
slide: function( event, ui ) {}
});
});
以上這篇基于Require.js使用方法(總結(jié))就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
JS基于正則表達(dá)式實(shí)現(xiàn)的密碼強(qiáng)度驗(yàn)證功能示例
這篇文章主要介紹了JS基于正則表達(dá)式實(shí)現(xiàn)的密碼強(qiáng)度驗(yàn)證功能,涉及javascript事件響應(yīng)及基于正則的字符遍歷、判斷等相關(guān)操作技巧,需要的朋友可以參考下2017-09-09
javascript省市級(jí)聯(lián)功能實(shí)現(xiàn)方法實(shí)例詳解
這篇文章主要介紹了javascript省市級(jí)聯(lián)功能實(shí)現(xiàn)方法,以不同實(shí)例形式分析了JavaScript實(shí)現(xiàn)省市級(jí)聯(lián)菜單的具體技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
JavaScript實(shí)現(xiàn)輪播圖片完整代碼
這篇文章主要為大家介紹了JavaScript實(shí)現(xiàn)輪播圖片的完整代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03
教你用Js寫(xiě)一個(gè)簡(jiǎn)單的五子棋小游戲
聽(tīng)說(shuō)這是一道騰訊的面試題,可能網(wǎng)上已經(jīng)有不少答案了,晚上沒(méi)事看到這道題就自己做了下,下面這篇文章主要給大家介紹了關(guān)于如何用Js寫(xiě)一個(gè)簡(jiǎn)單的五子棋小游戲的相關(guān)資料,需要的朋友可以參考下2022-07-07
JavaScript實(shí)現(xiàn)圖片的放大縮小及拖拽功能示例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)圖片的放大縮小及拖拽功能,結(jié)合實(shí)例形式分析了javascript鼠標(biāo)事件響應(yīng)及針對(duì)圖形元素的屬性操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-05-05
關(guān)于json字符串與實(shí)體之間的嚴(yán)格驗(yàn)證代碼
在一個(gè)項(xiàng)目中要求嚴(yán)格驗(yàn)證傳入的json字符串與定義的 類(lèi)匹配,否則不記錄。后來(lái)查了好多資料才弄明白,下面小編給大家分享下關(guān)于json字符串與實(shí)體之間的嚴(yán)格驗(yàn)證,感興趣的朋友一起看看吧2016-11-11
利用JavaScript實(shí)現(xiàn)一個(gè)日期范圍選擇器
日期范圍選擇器是一個(gè)常見(jiàn)的Web應(yīng)用功能,它允許用戶(hù)選擇一個(gè)日期范圍,本文我們將使用JavaScript來(lái)實(shí)現(xiàn)這個(gè)功能,感興趣的小伙伴可以了解下2024-01-01

