当前位置: 首页 > article >正文

从 0 搭建现代前端组件库:2026年完整实战指南

前言很多前端工程师用过 Element Plus、Ant Design但自己动手搭建组件库时却无从下手。本文从零开始带你搭建一个生产级组件库包含设计系统、工程化、文档、发布全流程。正文一、组件库架构设计1.1 整体架构my-ui/ ├── packages/ │ ├── components/ # 组件源码 │ ├── theme/ # 样式主题 │ └── utils/ # 工具函数 ├── docs/ # 文档站点 ├── play/ # 调试 playground ├── scripts/ # 构建脚本 └── package.json1.2 技术选型2026年标准环节工具说明构建Rollup Vite支持 ESM/CJS/UMD测试Vitest单元测试文档Storybook组件展示类型TypeScript类型定义样式SCSS CSS Vars主题定制发布Changeset版本管理二、组件设计与实现2.1 Button 组件示例// packages/components/button/src/button.tsximport{defineComponent,PropType}fromvueexportdefaultdefineComponent({name:MyButton,props:{type:{type:StringasPropTypeprimary|success|warning|danger,default:primary},size:{type:StringasPropTypesmall|medium|large,default:medium},disabled:Boolean,loading:Boolean},setup(props,{slots,emit}){return()(buttonclass{[my-button,my-button--${props.type},my-button--${props.size},{is-disabled:props.disabled,is-loading:props.loading}]}disabled{props.disabled||props.loading}onClick{()emit(click)}{props.loadingspanclassmy-button__loading/}{slots.default?.()}/button)}})2.2 样式设计CSS 变量方案// packages/theme/src/button.scss :root { --my-button-primary-bg: #409eff; --my-button-primary-text: #ffffff; --my-button-success-bg: #67c23a; --my-button-danger-bg: #f56c6c; --my-button-small-padding: 8px 12px; --my-button-medium-padding: 12px 20px; --my-button-large-padding: 16px 24px; } .my-button { display: inline-flex; align-items: center; justify-content: center; border: none; border-radius: 4px; cursor: pointer; transition: all 0.3s; --primary { background: var(--my-button-primary-bg); color: var(--my-button-primary-text); :hover { opacity: 0.8; } } --small { padding: var(--my-button-small-padding); font-size: 12px; } --medium { padding: var(--my-button-medium-padding); font-size: 14px; } }2.3 类型定义文件// packages/components/button/src/button.d.tsexporttypeButtonTypeprimary|success|warning|dangerexporttypeButtonSizesmall|medium|largeexportinterfaceButtonProps{type?:ButtonType size?:ButtonSize disabled?:booleanloading?:boolean}exportinterfaceButtonEmits{(e:click):void}三、工程化配置3.1 Rollup 构建配置// scripts/rollup.config.jsimport{defineConfig}fromrollupimportvuefromvitejs/plugin-vueimporttypescriptfromrollup/plugin-typescriptimportpostcssfromrollup-plugin-postcssimport{terser}fromrollup-plugin-terserexportdefaultdefineConfig([// ESM 构建{input:packages/components/index.ts,output:{file:dist/es/index.js,format:es},plugins:[vue(),typescript(),postcss({extract:true,minimize:true})],external:[vue]},// CJS 构建{input:packages/components/index.ts,output:{file:dist/lib/index.js,format:cjs},plugins:[vue(),typescript()],external:[vue]},// UMD 构建浏览器直接用{input:packages/components/index.ts,output:{file:dist/dist/index.full.js,format:umd,name:MyUI,globals:{vue:Vue}},plugins:[vue(),typescript(),terser()],external:[vue]}])3.2 package.json 配置{name:my-org/ui,version:0.1.0,type:module,main:dist/lib/index.js,module:dist/es/index.js,types:dist/types/index.d.ts,files:[dist,README.md],scripts:{build:rollup -c scripts/rollup.config.js,build:types:tsc --declaration --emitDeclarationOnly --outDir dist/types,test:vitest,docs:dev:storybook dev -p 6006,docs:build:storybook build -o docs-dist,release:changeset publish},peerDependencies:{vue:^3.3.0}}四、测试策略4.1 单元测试Vitest// packages/components/button/__tests__/button.spec.tsimport{describe,it,expect}fromvitestimport{mount}fromvue/test-utilsimportButtonfrom../src/buttondescribe(Button,(){it(renders correctly,(){constwrappermount(Button,{slots:{default:Click me}})expect(wrapper.text()).toBe(Click me)expect(wrapper.classes()).toContain(my-button)})it(handles different types,(){constwrappermount(Button,{props:{type:success}})expect(wrapper.classes()).toContain(my-button--success)})it(emits click event,async(){constwrappermount(Button)awaitwrapper.trigger(click)expect(wrapper.emitted()).toHaveProperty(click)})it(is disabled when loading,(){constwrappermount(Button,{props:{loading:true}})expect(wrapper.attributes(disabled)).toBeDefined()})})4.2 视觉回归测试Storybook Chromatic// packages/components/button/src/button.stories.tsimporttype{Meta,StoryObj}fromstorybook/vue3importButtonfrom./buttonconstmeta:MetatypeofButton{title:Components/Button,component:Button,argTypes:{type:{control:select,options:[primary,success,warning,danger]},size:{control:select,options:[small,medium,large]}}}exportdefaultmetatypeStoryStoryObjtypeofButtonexportconstPrimary:Story{args:{type:primary,default:Primary Button}}exportconstLoading:Story{args:{loading:true,default:Loading...}}五、文档站点搭建5.1 VitePress 配置// docs/.vitepress/config.tsimport{defineConfig}fromvitepressexportdefaultdefineConfig({title:My UI,description:A Vue 3 Component Library,themeConfig:{nav:[{text:Guide,link:/guide/},{text:Components,link:/components/}],sidebar:{/components/:[{text:Basic,items:[{text:Button,link:/components/button},{text:Icon,link:/components/icon}]},{text:Form,items:[{text:Input,link:/components/input},{text:Select,link:/components/select}]}]}}})六、发布与版本管理6.1 Changeset 配置// .changeset/config.json{$schema:https://unpkg.com/changesets/config2.3.1/schema.json,changelog:changesets/cli/changelog,commit:false,fixed:[],linked:[],access:public,baseBranch:main,updateInternalDependencies:patch,ignore:[]}6.2 发布流程# 1. 添加 changesetnpx changeset# 2. 提升版本npx changeset version# 3. 构建npmrun build# 4. 发布npx changeset publish七、设计系统对接7.1 Figma Tokens 同步// scripts/sync-figma-tokens.jsimport{getFigmaFile}fromfigma-apiasyncfunctionsyncTokens(){constfileawaitgetFigmaFile(FILE_KEY)consttokensextractTokens(file)// 生成 CSS 变量generateCSSVariables(tokens)// 生成 TypeScript 类型generateTSTypes(tokens)}八、总结搭建组件库不是简单的代码堆砌而是系统工程设计先行- 有完整的设计系统和规范质量保障- 测试覆盖、类型完整开发体验- 文档完善、调试方便发布流程- 自动化、版本管理2026年组件库新趋势AI 辅助设计Figma AI 生成组件Headless UI 模式逻辑与样式分离微前端适配Module Federation 支持

相关文章:

从 0 搭建现代前端组件库:2026年完整实战指南

前言 很多前端工程师用过 Element Plus、Ant Design,但自己动手搭建组件库时却无从下手。本文从零开始,带你搭建一个生产级组件库,包含设计系统、工程化、文档、发布全流程。 正文 一、组件库架构设计 1.1 整体架构 my-ui/ ├── packages/ …...

跨平台部署方案:DamoFD-0.5G在Windows/Linux/macOS的对比测试

跨平台部署方案:DamoFD-0.5G在Windows/Linux/macOS的对比测试 1. 引言 人脸检测技术在日常应用中越来越普及,从手机相册的自动分类到安防监控的实时分析,都离不开高效准确的检测模型。DamoFD-0.5G作为达摩院推出的轻量级人脸检测器&#xf…...

智慧树自动刷课插件:3分钟实现无人值守学习的完整指南

智慧树自动刷课插件:3分钟实现无人值守学习的完整指南 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台的繁琐操作而烦恼吗?智慧…...

当ComfyUI遇上昇腾NPU:一份针对Atlas 300I Duo的深度环境配置与疑难杂症排查指南

Atlas 300I Duo与ComfyUI深度整合实战:从硬件部署到AI创作全流程解析 在AI创作工具井喷式发展的当下,昇腾NPU与ComfyUI的结合为创作者提供了全新的硬件加速方案。不同于常规的GPU配置指南,本文将深入探讨Atlas 300I Duo推理卡在Ubuntu环境下的…...

Pixel Script Temple保姆级教程:Chrome插件模式接入现有写作工具链方案

Pixel Script Temple保姆级教程:Chrome插件模式接入现有写作工具链方案 1. 工具介绍与价值 Pixel Script Temple是一款专为剧本创作者设计的AI辅助工具,基于Qwen2.5-14B-Instruct大模型深度优化。它最大的特点是融合了复古像素风格界面与专业剧本创作功…...

全境封锁2 d3dx11_43.dll 丢失 一键修复:手把手教程与工具推荐

刚准备好装备准备刷全境封锁2的传奇本,结果游戏一启动就提示“丢失d3dx11_43.dll”,反复重试还是进不去。遇到这种情况,第一反应千万别是重装游戏——几十G的下载量太费时间了。这个dll文件其实是DirectX 11的组件,简单来说&#…...

TongWeb部署实战:从Domain创建到应用隔离,手把手教你规划生产环境(含冲突应用处理方案)

TongWeb生产环境部署指南:从Domain规划到应用隔离实战 最近在帮客户部署TongWeb生产环境时,发现很多团队对Domain和应用部署策略存在不少困惑。比如,一个刚接触TongWeb的开发团队把十几个应用全部塞进同一个Domain,结果某个高并发…...

龙泽科技新能源充电设备仿真教学软件|技术解析+职教落地指南

前言:随着新能源汽车行业爆发,职业院校新能源汽车专业实训数字化转型迫在眉睫。本文基于龙泽信息科技(江苏)有限公司(简称“龙泽科技”)官方发布的新能源汽车充电设备装配与调试仿真教学软件完整参数&#…...

如何快速掌握暗黑破坏神2存档编辑器:新手完整使用指南

如何快速掌握暗黑破坏神2存档编辑器:新手完整使用指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾在《暗黑破坏神2》中花费数小时刷装备却一无所获?是否想尝试不同角色构建但不想重新练级&am…...

Premiere Pro(pr)2026版最新详细安装教程

​前言: 简单介绍下Pr 2026的核心功能亮点: 作为专业级视频编辑软件,深度整合AI技术,主打高效剪辑、跨平台协作与影视级制作,适用于影视、短视频、企业宣传等场景。 1.AI视频扩展(Generative Extend&#…...

Qwen3-ASR-0.6B模型压缩与量化教程:进一步降低部署资源需求

Qwen3-ASR-0.6B模型压缩与量化教程:进一步降低部署资源需求 1. 引言 如果你正在尝试把语音识别模型塞进一台内存不大的设备里,或者想让它在边缘计算盒子上跑得更快,那你可能已经遇到了一个头疼的问题:模型太大,资源不…...

生成式AI应用成本优化全链路拆解(GPU利用率、Token精算与缓存穿透防控)

第一章:生成式AI应用成本控制策略 2026奇点智能技术大会(https://ml-summit.org) 生成式AI的落地实践正面临模型调用、推理延迟、数据存储与可观测性等多维度成本叠加挑战。忽视成本结构的设计,往往导致POC成功但规模化部署失败。有效的成本控制并非简单…...

避开CT图像重建的坑:Python实现滤波反投影时,为什么你的图像边缘有伪影?

避开CT图像重建的坑:Python实现滤波反投影时,为什么你的图像边缘有伪影? 当你第一次用Python实现滤波反投影算法时,看到重建图像边缘那些奇怪的星状伪影,是不是感觉既困惑又沮丧?这就像精心准备一道菜&…...

5分钟部署DeepSeek-OCR:免费开源的文字识别神器实测

5分钟部署DeepSeek-OCR:免费开源的文字识别神器实测 1. 快速了解DeepSeek-OCR 1.1 什么是DeepSeek-OCR DeepSeek-OCR是一款基于深度学习的高性能文字识别工具,它能准确识别图片中的文字,无论是印刷体还是手写体,甚至是低质量、…...

3D Face HRN人脸重建模型新手教程:从照片到3D模型的完整流程

3D Face HRN人脸重建模型新手教程:从照片到3D模型的完整流程 1. 为什么你需要这个工具 想象一下,你只需要一张普通的自拍照,就能在几分钟内获得一个带完整纹理的专业级3D人脸模型。这就是3D Face HRN人脸重建模型能为你做到的。 这个工具特…...

如何用NVIDIA Profile Inspector提升游戏性能:3步快速优化指南

如何用NVIDIA Profile Inspector提升游戏性能:3步快速优化指南 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 还在为游戏卡顿、画面撕裂而烦恼?NVIDIA Profile Inspector这款强…...

深度学习项目训练环境实操手册:使用matplotlib动画展示训练收敛过程

深度学习项目训练环境实操手册:使用matplotlib动画展示训练收敛过程 1. 开箱即用的深度学习训练环境 你是不是也遇到过这样的情况:好不容易找到一个开源深度学习项目,兴致勃勃地准备复现,结果光是配环境就折腾了好几天&#xff…...

DownKyi终极指南:5分钟掌握B站视频下载完整教程

DownKyi终极指南:5分钟掌握B站视频下载完整教程 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等)…...

从零构建微程序模型机:LPM_ROM配置与自定义指令实战

1. 微程序模型机入门指南 第一次接触微程序模型机时,我和大多数初学者一样感到迷茫——这堆专业术语像天书一样难以理解。但当我真正动手搭建后才发现,它就像乐高积木,只要掌握核心模块的组装逻辑,就能构建出属于自己的计算机系统…...

Z-Image-Turbo-辉夜巫女效果展示:超广角构图、景深虚化、胶片颗粒质感

Z-Image-Turbo-辉夜巫女效果展示:超广角构图、景深虚化、胶片颗粒质感 最近在玩一个挺有意思的AI图像生成模型,叫Z-Image-Turbo-辉夜巫女。这名字听起来有点二次元,但生成出来的图片效果,说实话,有点惊艳到我了。它不…...

CH32标准库实战:5分钟搞定GPIO配置与定时器中断(附完整代码)

CH32标准库实战:5分钟搞定GPIO配置与定时器中断(附完整代码) 沁恒微电子的CH32系列MCU凭借其出色的性价比和丰富的外设资源,在嵌入式开发领域越来越受欢迎。对于刚接触这款芯片的开发者来说,如何快速上手标准库进行基础…...

丹青幻境实战教程:如何用‘避讳’精准剔除AI常见畸变(手指/结构错误)

丹青幻境实战教程:如何用‘避讳’精准剔除AI常见畸变(手指/结构错误) “见微知著,凝光成影。执笔入画,神游万象。” 丹青幻境 是一款基于 Z-Image 架构与 Cosplay LoRA 历练卷轴打造的数字艺术终端。它告别了冷硬的科技…...

Bebas Neue开源字体:几何美学与现代设计的完美融合

Bebas Neue开源字体:几何美学与现代设计的完美融合 【免费下载链接】Bebas-Neue Bebas Neue font 项目地址: https://gitcode.com/gh_mirrors/be/Bebas-Neue Bebas Neue是一款采用SIL Open Font License v1.1许可证的完全免费开源字体,自2010年发…...

3步解决电脑噪音烦恼:用FanControl实现精准风扇控制

3步解决电脑噪音烦恼:用FanControl实现精准风扇控制 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/F…...

DAMOYOLO-S跨平台部署效果展示:Windows与Linux系统性能对比

DAMOYOLO-S跨平台部署效果展示:Windows与Linux系统性能对比 最近在折腾目标检测模型部署,发现一个挺有意思的现象:同一个模型,在不同操作系统上跑起来,效果和体验可能天差地别。特别是对于像DAMOYOLO-S这样兼顾精度和…...

从PCK到OKS:人体姿态估计指标演进史与选择指南

从PCK到OKS:人体姿态估计指标演进史与选择指南 在计算机视觉领域,人体姿态估计技术已经从实验室走向了广泛应用。从最初的简单关键点检测到如今的复杂多人姿态分析,评价指标也经历了显著的演进。本文将带您深入探索PCK、PCKh和OKS等核心指标的…...

SDXL 1.0电影级绘图工坊部署案例:全模型GPU加载免CPU卸载实操

SDXL 1.0电影级绘图工坊部署案例:全模型GPU加载免CPU卸载实操 想体验一下,用几句话描述,就能让AI为你生成一张电影海报级别的图片吗?今天要介绍的这个工具,就能帮你实现。它基于目前顶级的开源文生图模型SDXL 1.0&…...

用MATLAB和Pluto SDR从零搭建码索引调制系统:一个通信专业学生的实战复盘

从零构建码索引调制系统:一名通信新手的Pluto SDR实战手记 第一次接触Pluto SDR时,我盯着这个巴掌大的黑色设备看了足足五分钟——它真的能完成教科书里那些复杂的通信系统吗?作为通信工程专业大三学生,我和队友在参加"通达杯…...

AI故事应用落地陷阱全扫描,SITS2026工程师亲述:4个未公开的崩溃场景与防御方案

第一章:AI故事应用落地陷阱全扫描,SITS2026工程师亲述:4个未公开的崩溃场景与防御方案 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026现场,来自17家头部内容平台的AI工程负责人闭门复盘了2025年Q3上线的32个“故事生成…...

技术面试官喜欢问什么问题?

技术面试是求职过程中至关重要的一环,面试官的问题往往决定了候选人能否顺利拿到offer。那么,技术面试官究竟喜欢问哪些问题?这些问题背后又隐藏着怎样的考察意图?了解这些问题的类型和应对策略,可以帮助求职者更有针对…...