一、為什麼要使用require.js
# 首先一個頁面如果在載入多個js檔案的時候,瀏覽器會停止網頁渲染,載入檔案越多,網頁失去回應的時間就會越長;其次,由於js檔案之間存在依賴關係,因此必須嚴格保證載入順序,當依賴關係很複雜的時候,程式碼的編寫和維護都會變得困難。
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"
}
});
一種是逐一指定路徑
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"
}
});
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 ) {} }); }
以上是Require.js使用方法總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!