Vue 組件庫發布實戰(含 TypeScript 支持)

整理不易,如果本文對你有幫助,歡迎點個【贊 👍】+【收藏 ?】+【關注 🧡】

📦Vue 組件庫發布實戰(含 TypeScript 支持)

在上一篇中我們完成了一個基礎 Vue 3 組件的 npm 發布流程。本文將升級內容,帶你完成一個支持 TypeScript 和多個組件的 Vue 組件庫發布流程,適合想要長期維護 UI 庫或工程化封裝的你!


🔧一、項目初始化(TS + Vite)

① 創建目錄并初始化項目

mkdir vue-ui-lib
cd vue-ui-lib
pnpm init -y

② 安裝開發依賴

pnpm add vue@^3
pnpm add vite vue-tsc @vitejs/plugin-vue -D
pnpm add typescript -D

③ 初始化 TypeScript 配置

npx tsc --init

并編輯 tsconfig.json

{"include": ["src"],"exclude": ["node_modules", "dist"],"compilerOptions": {"target": "ESNext","module": "ESNext","moduleResolution": "Node","declaration": true,"declarationDir": "dist/types","outDir": "dist","strict": true,"esModuleInterop": true,"skipLibCheck": true,"jsx": "preserve","lib": ["ESNext", "DOM"]}
}

📁二、組件結構設計(多組件支持)

推薦結構:

src/components/Button/index.tsButton.vueInput/index.tsInput.vueindex.ts

示例組件:Button.vue

<template><button class="btn" @click="onClick"><slot /></button>
</template><script lang="ts" setup>
defineProps<{onClick?: () => void
}>()
</script><style scoped>
.btn {padding: 8px 16px;background-color: #409eff;color: white;border-radius: 4px;border: none;cursor: pointer;
}
</style>

對應的 index.ts

import Button from './Button.vue'
export default Button

根入口 src/index.ts

export { default as MyButton } from './components/Button'
export { default as MyInput } from './components/Input'
// 添加更多組件時,繼續擴展

🏗?三、配置 Vite 構建為組件庫

創建 vite.config.ts

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'export default defineConfig({plugins: [vue()],build: {lib: {entry: path.resolve(__dirname, 'src/index.ts'),name: 'MyUILib',fileName: (format) => `my-ui-lib.${format}.js`,formats: ['es', 'umd']},rollupOptions: {external: ['vue'],output: {globals: {vue: 'Vue'}}}}
})

🧾四、配置 package.json

{"name": "@your-username/vue-ui-lib","version": "1.0.0","main": "dist/my-ui-lib.umd.js","module": "dist/my-ui-lib.es.js","types": "dist/types/index.d.ts","files": ["dist"],"peerDependencies": {"vue": "^3.0.0"},"scripts": {"build": "vite build && vue-tsc --declaration --emitDeclarationOnly --outDir dist/types","prepublishOnly": "pnpm run build"}
}

🚀五、構建 & 發布組件庫

① 構建產物

pnpm run build
  • 生成 dist/*.js(構建好的 JS)
  • 生成 dist/types(類型聲明)

② 登錄并發布

pnpm login
pnpm publish

? 包發布成功后,即可被安裝使用:

pnpm add @your-username/vue-ui-lib

🧪六、在項目中使用你的組件庫

<template><MyButton @click="sayHi">Hello</MyButton>
</template><script setup lang="ts">
import { MyButton } from '@your-username/vue-ui-lib'const sayHi = () => alert('Hi from UI lib!')
</script>

📦七、如何持續更新和擴展

場景操作
? 添加新組件components/ 下新建文件夾,并導出
🔁 更新版本修改 package.json 中的 version
📦 重新發布pnpm run build && pnpm publish

📚總結回顧

步驟內容
1??初始化 TS + Vite 項目
2??編寫 Vue 3 組件結構,支持多組件
3??配置 Vite 構建和類型輸出
4??設置 package.json,準備發布
5??構建并發布到 npm
6??在其他項目中測試使用
7??持續維護和擴展版本

👏 這樣一個支持 TypeScript 的 Vue 組件庫就發布完成啦!可以無限擴展和維護。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/83942.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83942.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83942.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

新版雙紫擒龍、紫紫紅黃、動能二號源碼指標源碼公式講解

雙紫擒龍量化指標公式源碼&#xff0c;雙紫擒龍紫紫紅黃2025升級版的量化指標龍頭模型............ 實戰舉例&#xff0c;量化擒龍------副圖源碼&#xff0c;如下&#xff1a; DIF:EMA(CLOSE,12)-EMA(CLOSE,26); DEA:EMA(DIF,9); ABC2:REF(CLOSE,1); ABC3:IF((CLOSE-ABC2…

c++中鎖類型對比與實戰

C++中的鎖類型對比與實戰:std::lock_guard、std::unique_lock、std::shared_lock 在多線程編程中,合理地使用鎖是保證數據一致性和線程安全的關鍵。C++標準庫提供了多種鎖類型,每種都有其適用場景和性能特性。本文將深入分析 std::lock_guard、std::unique_lock、std::shar…

iview Switch Tabs TabPane 使用提示Maximum call stack size exceeded堆棧溢出

在vue項目中使用iview 框架部分組件時&#xff0c;直接引入使用報Maximum call stack size exceeded image.png 堆棧溢出 解決方案 更換組件名稱就可以了 image.png 或 image.png 就可以了 猜測是因為和vue自己提供的組件名稱一致了&#xff0c;重名問題導致的&#xff0c;具體…

初識結構體,整型提升及操作符的屬性

目錄 一、結構體成員訪問操作符1.1 結構體二、操作符的屬性&#xff1a;優先級、結合性2.1 優先級2.2 結合性C 運算符優先級 三、表達式求值3.1 整型提升3.2 算數轉化 總結 一、結構體成員訪問操作符 1.1 結構體 C語言已經提供了內置類型&#xff0c;如&#xff1a;char,shor…

JVM-內存結構

&#x1f9e9; 一、JVM內存五大核心結構詳解 &#x1f4cc; 1. 程序計數器&#xff08;Program Counter Register&#xff09; 特性說明作用記錄當前線程執行的字節碼行號指示器&#xff08;分支/循環/異常處理的核心&#xff09;線程私有? 每個線程獨立存儲指令位置異常? …

從 Revit 到 3DTiles:GISBox RVT 切片器如何讓建筑圖元在 Web 端展示

在GIS&#xff08;地理信息系統&#xff09;行業蓬勃發展的當下&#xff0c;數據處理與展示的效率和精準度成為關鍵。GISBox作為一款功能強大的一站式三維GIS數據編輯、轉換、發布平臺&#xff0c;憑借其獨特的“RVT切片器”功能&#xff0c;在RVT圖元處理方面也有著不俗的表現…

【Linux】為 Git 設置 Commit 提交模板方法,可統一個人或者項目的提交風格

為 Git 設置 Commit 提交模板 新建模板文件。注意之后不能刪除該文件。 gedit ~/.gitmessage.txt粘貼自己的模板。可以給 AI 提自己的需求&#xff0c;定制一個模板&#xff0c;例如 # <type>(<scope>): <description> # # [optional body] # # [optional…

Android第十二次面試GetX庫渲染機制

核心引擎&#xff1a;GetX / Obx 的魔法 .obs 是數據響應式化的關鍵操作&#xff0c;它將普通變量轉換為可觀察(Observable)對象&#xff1a; // 傳統變量 - 無法自動通知更新 int count 0; // 響應式變量 - 自動通知能力 var count 0.obs; // RxInt(0) Obx 是 UI ?響應式…

用 Whisper 打破沉默:AI 語音技術如何重塑無障礙溝通方式?

網羅開發 &#xff08;小紅書、快手、視頻號同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企業從事人工智能項目研發管理工作&#xff0c;平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

ubuntu 添加應用到啟動菜單

使用Alacarte菜單編輯器 Alacarte是一個簡單易用的菜單編輯器&#xff0c;可以幫助用戶添加、刪除或編輯應用程序的啟動菜單項。 安裝Alacarte sudo apt-get install alacarte 執行alacarte alacarte 使用說明 選擇新建項目進行添加 "Name"欄填自定義的名稱&quo…

【學習筆記】構造函數+重載相關

【學習筆記】構造函數重載相關 一、構造函數 構造函數在創建對象的過程就會執行&#xff0c;帶參數與不帶參數&#xff0c;帶參數的構造函數會默認將成員變量賦值傳進去的參數。 class Layer { private:int layer_id; // 層IDstd::string layer_json; // 層的JSON配置…

6.6 計算機網絡面試題

描述一下打開百度首頁后發生的網絡過程 網頁非常慢轉圈圈的時候&#xff0c;要定位問題需要從哪些角度&#xff1f; server a和server b&#xff0c;如何判斷兩個服務器正常連接&#xff1f;出錯怎么辦&#xff1f; 服務端正常啟動了&#xff0c;但是客戶端請求不到有哪些原因?…

Java -jar命令運行外部依賴JAR包的深度場景分析與實踐指南

Java -jar命令運行外部依賴JAR包的深度場景分析與實踐指南 引言&#xff1a;外部依賴JAR的必要性 在Java應用部署中&#xff0c;java -jar命令是啟動可執行JAR包的標準方式。但當應用需要依賴外部JAR文件時&#xff08;如插件系統、模塊化部署、共享庫等場景&#xff09;&…

XHR / Fetch / Axios 請求的取消請求與請求重試

XHR / Fetch / Axios 請求的取消請求與請求重試是前端性能優化與穩定性處理的重點&#xff0c;也是面試高頻內容。下面是這三種方式的詳解封裝方案&#xff08;可直接復用&#xff09;。 ? 一、Axios 取消請求與請求重試封裝 1. 安裝依賴&#xff08;可選&#xff0c;用于擴展…

2025最新Java日志框架深度解析:Log4j 2 vs Logback性能實測+企業級實戰案例

一、為什么printStackTrace是"代碼墳場"&#xff1f; 你寫的日志可能正在拖垮系統&#xff01; 在Java開發中&#xff0c;直接調用printStackTrace()打印異常堆棧是最常見的"自殺式操作"。這種方式會導致三大致命問題&#xff1a; 無法分級控制&#xff…

前端面試四之Fetch API同步和異步

Fetch API&#xff08;Fetch Application Programming Interface&#xff09;是一個現代的、基于Promise的網絡請求接口&#xff0c;用于在瀏覽器環境中發起網絡請求并處理響應。它是對傳統XMLHttpRequest的改進&#xff0c;提供了更簡潔、靈活和強大的功能&#xff0c;廣泛應用…

ubuntu 20.04掛載固態硬盤

我們有個工控機&#xff0c;其操作系統是ubuntu 20.04。可以接入一個固態硬盤。將固態硬盤插好后&#xff0c;就要進行掛載。在AI的指導下&#xff0c;過程并不順利。記錄如下&#xff1a; 1、檢查硬盤是否被識別 安裝好硬盤后&#xff0c;運行以下命令來檢查Linux系統是否…

涂裝協作機器人:重新定義涂裝工藝的智能化未來

一、涂裝場景的產業變革與核心訴求 1.1 千億級市場的技術突圍戰 在汽車制造領域&#xff0c;涂裝車間被稱為"工業化妝間"&#xff0c;其工藝質量直接影響產品溢價能力。當前行業面臨三重挑戰&#xff1a; 質量維度&#xff1a;傳統人工噴涂存在膜厚波動15μm的行業…

Unity優化篇之DrawCall

當然可以&#xff01;以下是完整、詳盡、可發布的博客文章&#xff0c;專注講解 Unity 的靜態合批與動態合批機制&#xff0c;并詳細列出它們對 Shader 的要求和所有限制條件。文章結構清晰、技術深度足夠&#xff0c;適合發布在 CSDN、掘金、知乎等技術平臺。 urp默認隱藏動態…

Electron桌面應用下,在拍照、展示pdf等模塊時,容易導致應用白屏

Electron 應用白屏問題分析與解決方案 Electron 應用中拍照、PDF展示等模塊導致白屏的常見原因通常與內存泄漏、渲染進程崩潰或資源加載超時有關。以下是具體排查與解決方法&#xff1a; 檢查內存泄漏 項目中&#xff0c;分析代碼&#xff0c;高頻操作或未釋放的資源可能導致…