「web前端」Require.js使用方法總結

「web前端」Require.js使用方法總結

一、為什麼要使用require.js

首先一個頁面如果在加載多個js文件的時候,瀏覽器會停止網頁渲染,加載文件越多,網頁失去響應的時間就會越長;其次,由於js文件之間存在依賴關係,因此必須嚴格保證加載順序,當依賴關係很複雜的時候,代碼的編寫和維護都會變得困難。

(因為發代碼有時會排版混亂,所以先發圖演示了。源碼已經打包好了,想學習的朋友可以下載練習練習,你不一定會哦。小編每天都會分享web前端和一些項目,還有php方面的知識,第一時間會在我的微信裡發佈,源碼下載加 imoee88。首先把代碼擼起來!首先把代碼擼起來!首先把代碼擼起來!重要的事說三遍,哈哈。借用某位大V的話說,“編程是門手藝活”。什麼意思?得練。)

require.js,就是為了解決這兩個問題:

實現js文件的異步加載,避免網頁失去響應;

管理模塊之間的依賴性,便於代碼的編寫和維護。

二、require.js的加載

第一步,去官網下載最新版本,直接放到頁面進行加載

<script src="js/require.js"></script>

加載這個文件可能會導致網頁失去響應,可以將它放到頁面的底部加載,也可以這樣寫

<script src="js/require.js" defer async="true" ></script>

async屬性表明這個文件需要異步加載,避免網頁失去響應。IE不支持這個屬性,只支持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"

}

});

上面的代碼給出了三個模塊的文件名,路徑默認與main.js在同一個目錄(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"

}

});

如果某個模塊在另一臺主機上,也可以直接指定它的網址,比如:

require.config({

paths: {

"jquery": "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min"

}

});

五、AMD模塊的寫法

require.js加載的模塊,採用AMD規範。也就是說,模塊必須按照AMD的規定來寫。

具體來說,就是模塊必須採用特定的define()函數來定義。如果一個模塊不依賴其他模塊,那麼可以直接定義在define()函數之中。

// 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));

});

如果這個模塊還依賴其他模塊,那麼define()函數的第一個參數,必須是一個數組,指明該模塊的依賴性。

define(['myLib'], function(myLib){

function foo(){

myLib.doSomething();

}

return { //返回模塊中的函數

foo : foo

};

});

當require()函數加載上面這個模塊的時候,就會先加載myLib.js文件。

六、加載非規範的模塊(shim的使用方式)

// app.js

function sayHello(name){

 alert('Hi '+name);

}

// main.js

require.config({

shim: {

'app': { //這個鍵名為要載入的目標文件的文件名,不能隨便命名。

exports: 'sayHello' //exports的值為my.js提供的 對外接口的名稱

}

}

});

require(['app'], function(sayHello) {

alert(sayHello())

})

導出一個函數,意味著我們得到了一個javaScript類

但是如果在my.js中寫了很多function,整合成一個function有點麻煩,想直接導出?方法如下:

// app.js

function sayHi(name){

alert('Hi '+name);

}

function sayHello(name){

alert('Hiello '+name);

}

// main.js

require.config({

shim: {

app: {

init: function() { //這裡使用init將2個接口返回

return {

sayHi: sayHi,

sayHello: sayHello

}

}

}

}

});

require(['app'], function(a) {

a.sayHi('zhangsan');

a.sayHello('lisi');

});

shim的有序導入:

require.config({

shim: {

'jquery.ui.core': ['jquery'], //表示在jquery導入之後導入

   '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 ) {}

   });

});

相關推薦

推薦中...