前端優化之 -- 使用 require.context 讓項目實現路由自動導入

来源:https://www.cnblogs.com/garfieldzhong/archive/2020/03/28/12585280.html
-Advertisement-
Play Games

最近接手了公司兩個項目,一個PC端後臺管理系統,一個app端項目,當然使用的依然是熟悉“Vue全家桶”那套!但是,當我打開項目時,裡面的代碼是這樣的(路由模塊): 就是所有路由配置都放到一個index.js中,這多少還是讓我有點驚呆的,顯然,項目會越做越大,模塊會越加越多,那這種不分模塊的架構方式明 ...


最近接手了公司兩個項目,一個PC端後臺管理系統,一個app端項目,當然使用的依然是熟悉“Vue全家桶”那套!但是,當我打開項目時,裡面的代碼是這樣的(路由模塊):

 

就是所有路由配置都放到一個index.js中,這多少還是讓我有點驚呆的,顯然,項目會越做越大,模塊會越加越多,那這種不分模塊的架構方式明顯給以後帶來很大維護困難,index.js文件會變得異常龐大...

所以,我便想趁現在代碼量還在可控的情況下趕緊優化一下吧!於是,跟領導說明瞭用意,並很快得到了首肯!所以就開始動起來了~

1. 分模塊:

  首先,當然是要把不同模塊的路由分離開來了(本來想只把新加入的功能模塊做處理,老模塊保留現狀,因為複製、粘貼也是很耗體力的。但是,想想所幸現在項目還不大,再加上目前雖然不年輕但還算力壯,且還稍微有點強迫症的催動下,所以還是決定將現在有代碼拆開...),心裡小小鬥爭一下之後,就開幹了!於是,就有了這樣的結構:

 

同時,讓index.js的全部代碼縮減成了這樣:

 

 

為啥你module里的文件名會是.routes.js 呢?這個嘛... 

其實是個小技巧,並不是便性規定, 1. 為了方便正則匹配,2. 為了標識文件的功能,讓人一看就是知道這是路由文件...

啥正則匹配?

 

2. 自動導入:

  為啥能將index.js縮減成這樣呢?其實就是代碼所示,利用了require.context來實現了自動導入...

  require.context:是一個webpack提供的api,通過執行require.context函數遍歷獲取到指定文件夾(及其下子文件夾)內的指定文件,然後自動導入。

  語法:require.context(directory, useSubdirectories = false, regExp = /^.//); 三個參數分別代表:

. directory 讀取的目錄;
    
. useSubdirectories 是否遍歷目錄的子目錄
     
. regExp 匹配文件的正則表達式 (即你要讀取目錄下什麼類型的文件,就是這個正則匹配

 

   require.context() 返回一個函數,該函數包含三個屬性 resolve()、keys()、id 具體定義請自行到百度上谷歌一下!  

   我們這裡用到了keys(): 返回匹配成功模塊的名字組成的數組:

  importAll()是對代碼進行了一個封裝,裡面的r.keys() 得到的將是:

  

['./action.routes.js', './apply.routes.js', './base.routes.js', './common.routes.js', './cost.routes.js', './liveActivity.routes.js']

  可以看到拿到的就是module目錄里的所有文件; 

  拿到數組文件之後便可對其進行forEach,然後通過 `r(key).default`拿到文件的內容也就是各種模塊寫好的路由配置,從而也就實現了路由模塊自動導入功能,從此,每次只需要要將新加的xxx.routes.js文件放入module目錄(也可以是裡面的子目錄),也就不必手動再import了!

 

  其實,require.context,還能實現其他模塊的自動導入功能,比如:Vue官網提到的實現基礎組件的全局註冊(Vue官網的示例),以及對ajax Api模塊化管理並自動引入等等...

 


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

-Advertisement-
Play Games
更多相關文章
  • 很苦惱,PROD上的SSIS項目,日積月累的往裡部署,加包,也沒覺得是個什麼問題。 但是今天從需要從PROD上把這個項目中所有的包都down下來,VS居然報錯Out Of Memory,無論是直接連接SSIS Catelog或者用SSMS導出ispac均報錯。 解決方法很簡單,使用PowerShel ...
  • 2020 年 3 月,Kylin 社區決定將 Kylin 的標語從「Extreme OLAP Engine for Big Data」更改為 「Analytical Data Warehouse for Big Data」,以更加準確地描述 Kylin 的能力和定位,也更容易地讓用戶通過搜索引擎檢索... ...
  • 如何併發的訪問資料庫呢?答案就是加鎖。 接下來說一下,資料庫的鎖機制,資料庫中都有哪些鎖? 首先呢,鎖是一種併發控制技術,鎖是用來在多個用戶同時訪問同一個數據的時候保護數據的。 有2種基本的鎖類型: 共用(S)鎖:多個事務可封鎖一個共用頁;任何事務都不能修改該頁;通常是該頁被讀取完畢,S鎖立即被釋放 ...
  • 作為 Android 11 開發者預覽版的一部分,Google 已經發佈了 "Android 11 系統鏡像" ,它們能夠執行 ARM 二進位文件,性能得到了顯著提升。 以前,依賴於 ARM 庫而無法構建 x86 變體應用程式的開發人員要麼必須使用具有完全 ARM 模擬的系統映像,這比在基於 x86 ...
  • 在Flutter預設創建的項目中可以使用系統Material圖標,在 文件中使用圖標設置如下: 系統圖標如下: 如果這裡面沒有我們想要的圖標如何處理呢?這時可以使用第三方圖標庫,下麵以 "阿裡巴巴的圖標" 庫為例。 查找圖標並加入購物車 找到自己想要的圖標後,將滑鼠放置到圖標上,加入購物車,如下圖: ...
  • 本文記錄如何讓網頁中的JS代碼和APP進行交互,簡單的說就是如何在網頁中執行APP的代碼。下麵以在網頁中執行代碼打開撥號鍵盤並輸入電話號碼為例介紹如何實現。 一、設置WebView允許它執行js代碼。 二、通過調用WebView的addJavascriptInterface添加一個對象給js使用,添 ...
  • 表格和邊框屬性, 表格表頭單元格,表格標題<caption>,表格高度和寬度,表格背景,表格空間,合併單元格,表格頭部、主體、頁腳,定義表格,定義表格的行,定義表格列的組定義用於表格列的屬性,定義表格的頁眉,定義表格的主體定義表格的頁腳<table><tbody><tr><th>\定義表格的表頭,<... ...
  • 一、繼續完善之前的頁面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>D188_3DPlayerXia</title> <style> *{ margin:0px; padding:0px; } body{ ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...