首頁 > web前端 > js教程 > 主體

JavaScript使用高階模組化require.js的具體方法詳解

黄舟
發布: 2017-11-01 09:58:22
原創
1784 人瀏覽過

本文介紹了require.js的具體使用方法,分享給大家,也給自己留個筆記。

Require.js:

RequireJS是一個非常小巧的javascript模組載入框架,是AMD(Asynchronous Module Definition,非同步模組載入機制)規範最好的實作之一。最新版的requireJS壓縮後只有14k,堪稱非常輕量。它也同時可以和其他的框架協調工作,使用requireJS必將使我們的前端程式碼品質得以提升。

首先我們先來看看一個普通的頁面js載入

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="js/index02.js" ></script>
  </head>
  <body>
    <h1>this is a page.</h1>
  </body>
</html>
登入後複製

運行結果:

此時,如果我們不對彈出框做操作,頁面就不會接著加載,就不會有頁面內容,這不是我們想要實現的結果。

下面我們用require.js做:

index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <script src="js/require2.1.11.js"></script>
    <script type="text/javascript">
      require(["js/index","js/index01"],function(){
        console.log("当js加载成功后会执行的函数");
      },function(){
        console.log("当js加载失败后会执行的函数");
      });
    </script>
  </head>
  <body>
  </body>
</html>
登入後複製

index.js

define(function(){
  console.log("this is a test!");
  function test(){
    console.log("haha,i am a test!");
  }
  test();
});
登入後複製

首先頁面上不再匯入test02.js ,只是導入了requireJS,其次在javascript中我們使用require()方法,在其中傳遞了一個陣列的參數,實參為我們要導入的js檔案的【路徑+檔案名稱。

此時的運行結果:

 

#可以看出,此時頁面內容已經顯現出來了。並不像前面我們傳統的一樣在等待js運行完成後頁面再加載,而是頁面加載完成後才運行js程式碼,這樣在運行效率上就大大的提高了。

根據上面的程式碼,我們可以來分析requirejs的基本API:

requireJS會定義三個變數:define,require,requirejs

  1. require==requirejs,一般使用require比較短。

  2. define 用來定義一個模組

  3. #require 載入依賴模組(引用定義好的模組),並執行載入完後的回呼函數

require有三個參數:

require(["js/index","js/index01"],function(){
        console.log("当js加载成功后会执行的函数");
      },function(){
        console.log("当js加载失败后会执行的函数");
      });
//第一个参数:定义require中的依赖,参数必须是数组形式,即使只有一个依赖,也必须使用数组形式传参。
//第二个参数:是一个回调函数,用来处理加载完毕后的逻辑,当所有模块加载完成后触发
//第三个参数:也是一个回调函数,用来处理模块加载失败后的情况。如上面代码,js中没有定义index01.js这个文件,所以出调用这个回调函数。
登入後複製

載入網頁檔案

# #之前我們載入的都是本地的js文件,但是,有些時候我們又需要載入網路上的文件,那又該怎麼載入呢?下面我們就來介紹一下怎樣載入網路上的js檔.

我們現在以載入一個

jquery.js檔為例:

//百度cdn公共库jQuery地址:   http://apps.bdimg.com/libs/jquery/2.1.1/jquery.js 
//jQuery官方地址:      https://code.jquery.com/jquery-3.1.1.js
//注意:网络上去取时不能加后缀,否则取不到
require.config({
  paths : {
    //为网络上的库去一个名字:jquery
    "jquery" : ["https://code.jquery.com/jquery-3.1.1"]
  }
});

//
require(["jquery","js/test01","js/test02"],function(){
  alert("页面加载成功~~");
},function(){
  alert("页面加载失败~~")
});
登入後複製

在取網路上的文件時注意:

1、config方法的參數是一個物件

2、paths的值也是一個物件
3、當我們為網路上的函式庫取名字是任意,但建議取有意義的名字,別人可以透過名稱知道你的網路資源是什麼資源
4、庫的值是一個數組,意味著可以多個同時寫,防止網路異常取不到
5、特別注意:網路資源路徑不能帶後綴名,否則取不到
6、我們也可以先讓去網路中去取,如果取不到,再在本地取,減輕本地服務的壓力(屬於專案最佳化)。

require.config({
  paths : {
    //这样配置,减轻本地服务器的压力
    "jquery" : ["https://code.jquery.com/jquery-3.1.1.js","js/jquery-1.8.3"]
  }
});

//
require(["jquery","js/test01","js/test02"],function(){
  alert("页面加载成功~~");
},function(){
  alert("页面加载失败~~")
});
登入後複製

同樣我們也可以將本地的配置到paths中:

require.config({
  paths : {
    //这样配置,减轻本地服务器的压力
    "jquery" : ["https://code.jquery.com/jquery-3.1.1","js/jquery-1.8.3"],
    //将本地的js文件同样配置,之后引用
    "test01" : ["js/test01"],
    "test02" : ["js/test02"]
  }
});

//
require(["jquery","test01","test02"],function(){
  alert("页面加载成功~~");
},function(){
  alert("页面加载失败~~")
});
登入後複製

上面的例子中重複出現了require.config配置,如果每個頁面中都加入配置,必然顯得十分不雅,requirejs提供了一個叫」主資料」的功能,我們先建立一個main.js:

require.config({
  paths : {
    //这样配置,减轻本地服务器的压力
    "jquery" : ["https://code.jquery.com/jquery-3.1.1","js/jquery-1.8.3"],
    //将本地的js文件同样配置,之后引用
    "test01" : ["js/test01"],
    "test02" : ["js/test02"]
  }
});
登入後複製

然後再頁面中使用下面的方式來使用requirejs:

<script type="text/javascript" src="js/require2.1.11.js" ></script>
<script type="text/javascript" src="js/main.js" ></script>
<script type="text/javascript">

  require(["jquery","t1","t2"],function(){
    alert("页面加载成功~~");
  },function(){
    alert("页面加载失败~~")
  });

</script>
登入後複製

在官方提供了一種基於標籤屬性的方式:

<script data-main="js/main" src="js/require2.1.11.js" ></script>
登入後複製

將所有的設定和導入js都放在了main.js中,這樣在頁面只要這樣一個標籤就行了。

程式碼示範如下:

//test01.js--定义一个js模块
define(function(){
  function test(){
    console.log("this is test01.js");
  }
  test();

  $("p").css("color","#DB7093");
});
登入後複製
//main.js--requirejs的全局配置
require.config({
  paths:{
    "jquery":["jquery-1.8.3"],
    "test":["test01"]
  },
  shim:{
    "test":["jquery"]
  }
});
require(["test"],function(){
  console.log("success!");
});
登入後複製
//index.html--此时,引入js文件只需一行代码
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" data-main = "js/main" src="js/require2.1.11.js" ></script>
  </head>
  <body>
    <p>i am liyanan and this is a testn Page.</p>
  </body>
</html>
登入後複製

以上是JavaScript使用高階模組化require.js的具體方法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板