基于Require.js使用方法(總結(jié))
一、為什么要使用require.js
首先一個(gè)頁面如果在加載多個(gè)js文件的時(shí)候,瀏覽器會(huì)停止網(wǎng)頁渲染,加載文件越多,網(wǎng)頁失去響應(yīng)的時(shí)間就會(huì)越長;其次,由于js文件之間存在依賴關(guān)系,因此必須嚴(yán)格保證加載順序,當(dāng)依賴關(guān)系很復(fù)雜的時(shí)候,代碼的編寫和維護(hù)都會(huì)變得困難。
require.js,就是為了解決這兩個(gè)問題:
1. 實(shí)現(xiàn)js文件的異步加載,避免網(wǎng)頁失去響應(yīng);
2. 管理模塊之間的依賴性,便于代碼的編寫和維護(hù)。
二、require.js的加載
第一步,去官網(wǎng)下載最新版本,直接放到頁面進(jìn)行加載
<script src="js/require.js"></script>
加載這個(gè)文件可能會(huì)導(dǎo)致網(wǎng)頁失去響應(yīng),可以將它放到頁面的底部加載,也可以這樣寫
<script src="js/require.js" defer async="true" ></script>
async屬性表明這個(gè)文件需要異步加載,避免網(wǎng)頁失去響應(yīng)。IE不支持這個(gè)屬性,只支持defer,所以把defer也寫上。
加載require.js以后,下一步就要加載我們自己的代碼了,也就是入口,可以叫主模塊,如果文件名叫main.js,寫成下面這樣就可以了:
<script src="js/require.js" data-main="js/main"></script> .js后綴可以省略
三、主模塊的寫法
如果主模塊依賴于jQuery可以這樣寫
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目錄,則有兩種寫法。
• 一種是逐一指定路徑
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模塊的寫法
require.js加載的模塊,采用AMD規(guī)范。也就是說,模塊必須按照AMD的規(guī)定來寫。
具體來說,就是模塊必須采用特定的define()函數(shù)來定義。如果一個(gè)模塊不依賴其他模塊,那么可以直接定義在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è)模塊還依賴其他模塊,那么define()函數(shù)的第一個(gè)參數(shù),必須是一個(gè)數(shù)組,指明該模塊的依賴性。
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ì)外接口的名稱 } } }); require(['app'], function(sayHello) { alert(sayHello()) })
導(dǎo)出一個(gè)函數(shù),意味著我們得到了一個(gè)javaScript類
但是如果在my.js中寫了很多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é))就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
npm install jquery報(bào)錯(cuò)問題解決
這篇文章主要為大家介紹了npm install jquery報(bào)錯(cuò)問題解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10Three.js利用dat.GUI如何簡化試驗(yàn)流程詳解
dat.gui可以方便地向場(chǎng)景中添加控制條,隨時(shí)調(diào)整參數(shù)。下面這篇文章主要給大家介紹了關(guān)于Three.js利用dat.GUI如何簡化試驗(yàn)流程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-09-09利用JavaScript實(shí)現(xiàn)網(wǎng)頁版2048小游戲
這篇文章主要介紹了如何利用HTML+CSS+JS編寫一個(gè)網(wǎng)頁版的2048小游戲,代碼簡單易懂對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11深入了解JavaScript中的二進(jìn)制操作及位掩碼應(yīng)用
在JavaScript中,二進(jìn)制操作可以說是一項(xiàng)非常強(qiáng)大和有用的技能,尤其是在處理數(shù)據(jù)和位掩碼時(shí),它們是不可或缺的,本文將介紹JavaScript中的二進(jìn)制操作,包括什么是二進(jìn)制以及如何在JavaScript中進(jìn)行二進(jìn)制操作2023-06-06JS前端開發(fā)之exec()和match()的對(duì)比使用
match()方法可在字符串內(nèi)檢索指定的值,或找到一個(gè)或多個(gè)正則表達(dá)式的匹配,下面這篇文章主要給大家介紹了關(guān)于JS前端開發(fā)之exec()和match()的對(duì)比使用的相關(guān)資料,需要的朋友可以參考下2022-09-09前端使用crypto.js進(jìn)行加密的函數(shù)代碼
最近在使用Cookies加密保存數(shù)據(jù)的時(shí)候,接觸到crypto,使用還算簡單,在這里記錄一下2020-08-08javascript 加入收藏、設(shè)為首頁(IE,firefox兼容腳本之家版)
網(wǎng)上流行很多的加入收藏、設(shè)為首頁等功能代碼,但各方面不是很完善,特腳本之家編輯特為大家準(zhǔn)備了可以直接使用的代碼。2009-11-11