Vue3 企業級優雅實戰 - 組件庫框架 - 5 組件庫通用工具包

来源:https://www.cnblogs.com/youyacoder/archive/2022/11/15/16892329.html
-Advertisement-
Play Games

本文繼續組件庫開發環境的搭建,前面兩篇分別介紹了組件庫中組件項目的初始化、組件庫 CSS 架構,本文介紹通用工具庫的搭建。在組件開發過程中,可能會調用一些通用的工具函數,這些工具函數便可以提取到一個獨立的 npm 包中。 ...


該系列已更新文章:
分享一個實用的 vite + vue3 組件庫腳手架工具,提升開發效率
開箱即用 yyg-cli 腳手架:快速創建 vue3 組件庫和vue3 全家桶項目
Vue3 企業級優雅實戰 - 組件庫框架 - 1 搭建 pnpm monorepo
Vue3 企業級優雅實戰 - 組件庫框架 - 2 初始化 workspace-root
Vue3 企業級優雅實戰 - 組件庫框架 - 3 搭建組件庫開發環境
Vue3 企業級優雅實戰 - 組件庫框架 - 4 組件庫的 CSS 架構

本文繼續組件庫開發環境的搭建,前面兩篇分別介紹了組件庫中組件項目的初始化、組件庫 CSS 架構,本文介紹通用工具庫的搭建。在組件開發過程中,可能會調用一些通用的工具函數,這些工具函數便可以提取到一個獨立的 npm 包中。

1 創建工具包

1.1 初始化工具包

到目前為止,packages 目錄下有三個包:foo 示例組件、scss 樣式、yyg-demo-ui 組件庫聚合,現創建第四個:utils

在命令行中進入 utils 目錄,使用 pnpm 初始化。

pnpm init

修改自動生成的 package.json 文件中的 namemain ,內容如下:

{
  "name": "@yyg-demo-ui/utils",
  "version": "1.0.0",
  "description": "通用工具函數",
  "main": "index.ts",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

由於工具包咱們也採用 TypeScript 編寫,在 utils 下也提供一份 tsconfig.json 文件:

{
  "compilerOptions": {
    "target": "es2015",
    "lib": [
      "es2015"
    ],
    "module": "commonjs",
    "rootDir": "./",
    "allowJs": true,
    "isolatedModules": false,
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "skipLibCheck": true
  }
}

1.2 編寫第一個工具函數

需求描述:組件間通信是一個剛需,當組件層級較多時,可以使用全局匯流排來通信。Vue 2.x 中通常使用 EventBus 作為全局匯流排,而 Vue 3.x 可以使用 mittmitt 體積小,支持全部事件的監聽和批量移除,不依賴 Vue 實例,可以跨框架使用。咱們的第一個工具函數就是簡單封裝 mitt,導出 mitt 對象即可。

首先在 utils 包下安裝 mitt 依賴:

pnpm install [email protected]

細心的同學會發現,在引入 mitt 時優雅哥指定了版本號 1.1.3,這是因為,優雅哥在使用當前最新的 3.0.0 版本時一直提示類型錯誤或找不到類型聲明文件,由於沒空處理,就簡單粗暴的降到 1.1.3 版本。

utils 目錄下創建源碼目錄 src,併在 src 中創建 emitter.ts 文件。

utils/src/emitter.ts

import mitt from 'mitt'
const Mitt = mitt
export const emitter: mitt.Emitter = new Mitt()

export default emitter

上面的第二行代碼看著多餘,因為本質上就是 new mitt(),這麼做是為了滿足 eslint 的規則:

A constructor name should not start with a lowercase letter.

1.3 編寫第二個工具函數

上面的 emitter 對象會在後面的組件開發中使用到,在 foo 中並未使用到,所以咱們再創建一個測試使用的工具函數。

utils/src/ 目錄下創建 test-log.ts 文件:

export const testLog = (str: string) => {
  console.log('test log: ', str)
}

1.4 入口文件

前面的 package.json 中指定了 mainindex.ts,在 utils 目錄下創建 index.ts 文件,導入並導出所有的工具函數等。

export { emitter } from './src/emitter'
export { testLog } from './src/test-log'

總結一下,組件庫通用工具包的目錄結構如下:

packages/
  |- utils/
    |- src/
        |- emitter.ts
        |- test-log.ts
    |- index.ts
    |- tsconfig.json
    |- package.json

2 在組件中使用工具包

2.1 安裝依賴

前面已經開發了 foo 示例組件,如果該組件要使用工具包,首先需要安裝依賴。在命令行中進入 foo 目錄:

pnpm install @yyg-demo-ui/utils

執行後 foo 的 package.json 中會多了一行依賴:

"dependencies": {
  "@yyg-demo-ui/utils": "workspace:^1.0.0"
}

2.2 使用工具

由於 utils 包指定了 mainindex.ts,並且所有的工具都在 index.ts 中導入並導出,所以在使用時只需引入 utils 包即可。

例如要使用上面創建的 testLog 函數,則只需要在代碼中如下引入:

import { testLog } from '@yyg-demo-ui/utils'

setup 中的按鈕點擊事件調用該方法:

const onBtnClick = () => {
  console.log('點擊按鈕測試', props.msg)
  testLog(props.msg)
}

後面再開發過程中如果新增工具函數:如 JSON Schema 的解析等,則往 utils 中添加即可,併在 utils/index.ts 中統一將其導入並導出。

感謝你閱讀本文,如果本文給了你一點點幫助或者啟發,還請三連支持一下,點贊、關註、收藏,程式員優雅哥會持續與大家分享更多乾貨


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

-Advertisement-
Play Games
更多相關文章
  • 背景:內網環境伺服器不能直接安裝工具或服務,可以用一臺外網伺服器同步阿裡雲的yum倉庫,作為本地倉庫 搭建本地yum倉庫 編輯yum配置文件,開啟緩存使用功能,設置緩存路徑 cp /etc/yum.conf /etc/yum.conf.bak vim /etc/yum.conf cachedir=/ ...
  • SingleStore(前身 MemSQL)是一個為數據密集型應用設計的雲原生資料庫。它是一個分散式的關係型 SQL 資料庫管理系統(RDBMS),具有 ANSI SQL 支持,它以數據攝入、交易處理和查詢處理的速度而聞名。SingleStore 主要存儲關係型數據,但也可以存儲 JSON 數據、圖 ...
  • 一、Installing ClickHouse-22.10.2.11 on openEuler 1 地址 https://clickhouse.com https://packages.clickhouse.com https://github.com/ClickHouse/ClickHouse 2 ...
  • 資料庫用戶通常依賴隔離級別來確保數據一致性,但很多資料庫卻並未達到其所表明的級別。主要原因是:一方面,資料庫開發者對各個級別的理解有細微差異;另一方面,實現層面沒有達到理論上的要求。 用戶在使用或開發者在交付資料庫前,需要對隔離級別進行快速的正確性驗證,並且希望驗證是可靠的(沒有誤差)、快速的(多項 ...
  • 摘要:本文講解了GaussDB(DWS)上模糊查詢常用的性能優化方法,通過創建索引,能夠提升多種場景下模糊查詢語句的執行速度。 本文分享自華為雲社區《GaussDB(DWS) 模糊查詢性能優化》,作者: 黎明的風 。 在使用GaussDB(DWS)時,通過like進行模糊查詢,有時會遇到查詢性能慢的 ...
  • 1 前言 ElasticSearch是一個實時的分散式搜索與分析引擎,常用於大量非結構化數據的存儲和快速檢索場景,具有很強的擴展性。縱使其有諸多優點,在搜索領域遠超關係型資料庫,但依然存在與關係型資料庫同樣的深度分頁問題,本文就此問題做一個實踐性分析探討 2 from + size分頁方式 from ...
  • 項目中需要計算使用年限,按月份算。剛開始踩了坑,不足1年應該按1年算。記錄下~ 和當前時間比較,用DATEDIFF函數DateDiff(month,比較的時間,getdate())先算出月份,再除以12算年份 查看代碼 --月份差值 2.083333 select CONVERT(decimal,D ...
  • 這裡說的占位符,實際就是排版時需要展示的圖片,圖片基於占位符填充,那麼處理圖片時,怎麼解決占位符(圖片)的上下偏移在設置占位符屬性時,我通過以下方法來實現它: + (NSAttributedString *)wxImageAttributeCoreTextFromPaperQuestion:(WXT ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...