JavaScript模塊化思想requireJS的使用

来源:http://www.cnblogs.com/enjoymylift/archive/2016/11/05/6033256.html
-Advertisement-
Play Games

1. 使用require.js的意義 (1)實現JS文件的非同步載入,避免網頁因為載入JS文件緩慢造成網頁未響應 (2)管理模塊之間的依賴性,便於代碼的編寫和維護。頁面中只需要引入require.js和main.js,其餘的js文件全部通過require.js管理。 2. 獲取require.js r ...


1. 使用require.js的意義   (1)實現JS文件的非同步載入,避免網頁因為載入JS文件緩慢造成網頁未響應 (2)管理模塊之間的依賴性,便於代碼的編寫和維護。頁面中只需要引入require.js和main.js,其餘的js文件全部通過require.js管理。
  2. 獲取require.js     requireJS中文網:http://www.requirejs.cn/home.html
3. 使用require.js 把require.js放入項目的js目錄下:

我們需要在html頁面中引入require.js:

1 <script src="js/require.js" type="text/javascript" charset="utf-8" defer="defer" async="async"></script>

接下來,在js目錄下新建我們的入口js文件,我們把它命名為“main.js”。這個文件就相當於java語言中的main函數,是整個js模塊體系的入口,我們在main.js中引用我們需要依賴的js文件。

在剛剛引入require.js的script標簽中添加一行一個data-main屬性,並賦值為“js/main”。

1 <script src="js/require.js" data-main = "js/main" type="text/javascript" charset="utf-8" defer="defer" async="async"></script>

這個屬性的值就是指定main.js文件的路徑,可以省略.js尾碼。


 

4. 如何配置main.js文件 完成了準備工作,接下來看我們可以在main.js中可以乾什麼。 (1)寫js 我們可以直接在main.js中編輯javaScript代碼:
1 // main.js
2 console.log("main.js被執行");

(2)引入依賴模塊(require()函數) - 加入要引入的依賴模塊和main.js在同一層目錄,可以直接使用模塊文件名。
1 require(['firstModule','secondModule','thirdModule'],function(firstModule,secondModule,thirdModule){
2     //模塊載入完成後執行的回調函數
3 });
- 如果我們需要手動配置模塊文件路徑,使用require.config()方法。 該方法需要寫在main.js文件的頭部:
1 require.config({  // main.js文件的路徑是js/main.js
2     paths:{
3         "firstModule":"lib/firstModule.js"  // 路徑是js/lib/firstModule.js
4         "secondModule":"lib/secondModule.js"    // 路徑是js/lib/secondModule.js
5         "thirdModule":"lib/thirdModule.js"    // 路徑是js/lib/thirdModule.js
6     }
7 });

我們發現這三個依賴的js文件都在js目錄下的lib目錄下,為了書寫簡單,我們可以設置“基目錄”:

1 require.config({  // main.js文件的路徑是js/main.js
2     baseUrl:"js/lib",
3     paths:{
4         "firstModule":"firstModule.js"  // 路徑是js/lib/firstModule.js
5         "secondModule":"secondModule.js"    // 路徑是js/lib/secondModule.js
6         "thirdModule":"thirdModule.js"    // 路徑是js/lib/thirdModule.js
7     }
8 });

我們發現這樣寫有一個問題,就是依賴幾個js模塊,就得發送幾次js請求,require.js針對這個問題有一個優化工具,可以把多個模塊合併在一個文件中,減少js請求。這個等我瞭解之後再單獨說... ...


5. 接下來,我們看一個完整的使用AMD寫法實現的模塊載入到調用執行的例子:

目錄結構如下:

 1 /*
 2  * js/lib/dates.js
 3  */
 4 define(function(){
 5     let date = new Date();
 6     let outDate = function(){
 7         console.log(date.getDate());
 8     };
 9     return {
10         outDate:outDate
11     };
12 });
13 
14 
15 
16 /*
17  *  js/main.js
18  */
19 require(['lib/dates'],function(dates){
20     dates.outDate();
21 });

執行結果:


 

6. 如何載入沒有使用AMD規範的模塊(沒有使用define()函數定義)

方法:使用require.config()方法的shim屬性配置。 以jquery.scroll插件為例演示:
1 shim:{
2    "jquery.scroll":{
3         deps:['jquery'],
4         exports:'jQuery.fn.scroll'
5    }
6 }
- deps : 是一個數組,表明該模塊依賴的模塊 - exports : 表明模塊外部調用該模塊時的變數名

  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、前言 OGNL和標簽庫的作用,粗暴一點說,就是減少在JSP頁面中出現java代碼,利於維護。 1.1、OGNL 1.1.1、什麼是OGNL? OGNL(Object-Graph Navigation Language):對象圖形導航語言,是一種功能強大的表達式語言,通過簡單的語法,就能夠任意存取 ...
  • 秋招結束了~~,好像偷懶了很久,沒更博了。總結一下自己近來看書的內容。 說明一下,內容大部分來自《高性能網站建設進階指南》。 亂入內容 Web應用和傳統桌面應用有一個共同的目標:儘可能快地響應用戶輸入。 怎樣才算是快?Jakob Nielsen是Web可用性領域知名且備受推崇的專家,引用他的觀點來說 ...
  • 前言 隨著頁面的內容豐富,以及網站體驗更好、性能優化等,原有的通過script標簽引入JavaScript腳本的方式已經不能很好地解決,此時新的一種JavaScript載入方式產生了——延時載入、執行。而js(JavaScript,下同)模塊化可以說是上面延時、執行的一種表示形式。 requirej ...
  • 今天(周六)下午我在公司加班時不知道要乾什麼,就打開公司的一個wordpress項目網站,想看下之前自己做的一個網頁是否有問題。 打開網站首頁,我習慣性的打開了chrome的調試工具,然後滑鼠開始滾動頁面,然後問題就出來了:頁面無法向下滾動,調試工具的console里報了好多undefined的錯誤 ...
  • 一、事件: 1、模式觸發事件: ①DOM:elem.onXXX();只能觸發直接用onXXX綁定的事件處理函數;用addEventistener添加的事件監聽無法模擬出發觸發; ②jQuery:$(...).trigger("事件名");可簡寫:$(...).事件名; 2、頁面載入後執行: ①jQu ...
  • 寫的比較弱,只能處理50道以內的選項為A-D的單選題,正確答案自己輸進去,必須要大寫,不能有空格和逗號,提交會出分,錯誤的題號和答案會console.log()出來. <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></ti ...
  • 這是我在面試大公司時碰到的一個筆試題,當時自己雲里霧裡的胡寫了一番,回頭也曾思考過,最終沒實現也就不了了之了。 昨天看到有網友說面試中也碰到過這個問題,我就重新思考了這個問題的實現方法。 對於想進大公司的童鞋,我想多說兩句,基礎知識真的很關鍵。平時在工作中也深刻體會到,沒有扎實的基礎知識,簡單問題容 ...
  • 目前來看,團隊內部前端項目已全面實施組件化開發。組件化的好處太多,如:按需載入、可復用、易維護、可擴展、少挖坑、不改組件代碼直接切成伺服器端渲染(如 "Nuclear" 組件化可以做到,大家叫同構)... 怎麼做到這麼強大的優勢,來回憶下以前見過的坑,或者現有項目里的坑。 CSS層疊樣式?保佑不要污 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...