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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;高频操作或未释放的资源可能导致…