- 前端
- UI组件
【免费下载链接】naive-ui
A Vue 3 Component Library. Fairly Complete. Theme Customizable. Uses TypeScript. Fast.
naive-ui 是一套使用 TypeScript 开发、主题高度可定制的 Vue 3 组件库,其 CHANGELOG.zh-CN.md 完整记录了从 1.0.x 到当前 2.45.2 的每一次发版:新组件、新属性、破坏性变更、bug 修复与国际化(i18n)扩展。本文以该文档为骨架,结合仓库中的 src/version.ts、src/components.ts、src/locales/index.ts 等源码,梳理 naive-ui 的演进路线,帮助你在升级版本、排查回归问题、理解组件 API 设计动机时,把 CHANGELOG 变成真正可用的决策工具。
CHANGELOG 的结构与阅读方法
naive-ui 的中文 CHANGELOG 采用「版本倒序」排列,最新的NEXT_VERSION(未发布版本)位于文件顶部,其后按版本号从新到旧排列,例如2.45.2、2.45.1、2.45.0……一直到最早的1.0.1。每个版本条目内部通常按以下分类组织:
- Breaking Changes:破坏性变更,升级时需要重点关注,例如属性更名、默认值变化、DOM 结构调整;
- Feats / Features:新增功能,包括新组件、新属性、新方法、新插槽;
- Fixes:缺陷修复,通常会附带对应的 GitHub issue 编号;
- i18n:国际化语言包的新增与更新;
- Perf / Performance:性能优化;
- Deprecated:废弃的 API 及其替代方案。
以 2.45.2 为例(2026-08-21发布),其条目包含n-ellipsis点击报错、n-modal点击遮罩无法关闭、n-data-table数据清空后表头横向滚动位置重置等修复。而在 src/version.ts 中可以看到当前仓库版本号正是2.45.2,与 CHANGELOG 顶端发布的版本严格对应,这也说明 CHANGELOG 与发版流程是同步维护的。
2.45.0:vue-jsx-vapor 构建与近期重点更新
构建体系变更:vue-jsx-vapor
2.45.0 是近期最重要的一次发版,其 Breaking Changes 明确说明:自此版本起,包产物改为使用 vue-jsx-vapor 构建。CHANGELOG 对此给出了关键的适用性说明:
- 该变更预期不会造成破坏性影响,用户使用 naive-ui 的方式与组件表现均不变化;
- 使用 vue-jsx-vapor 构建不代表naive-ui 是原生 vapor 构建产物,它依然是 vdom 结构;
- 如果你需要在纯 vapor app 中使用 naive-ui,仍然需要将 interop 设为
true。
这一说明对升级决策至关重要:普通 VDOM 应用可以直接升级,而 Vapor 模式应用需要额外配置 interop。同时 2.45.0 还大幅减小了构建产物中.d.ts的体积(Perf),并修复了vitest-setup.ts被误输出到构建产物的问题。
2.45.0 的功能新增
2.45.0 在表单、上传、图片、表格、标签页、评分、折叠过渡等组件上均有增强:
- 表单:
n-form的validate方法支持按 path 过滤表项(关闭 #7475); - 选择类:
n-checkbox-group、n-radio-group新增options、label-field、value-field属性(关闭 #7505); - 上传:
n-upload新增always-show-actions属性(关闭 #8073); - 图片:
n-image新增keep-drag-offset属性(关闭 #7544); - 数据表格:
n-data-table新增getFilteredAndSortedData和getCurrentPageData方法(关闭 #8088); - 标签页:
n-tabs新增show-scroll-button、center-active-tab属性与scrollToCurrentTab方法,并支持 RTL,placement新增'start'、'end'; - 评分:
n-rate新增on-update:hover-value属性(关闭 #8131); - 折叠过渡:
n-collapse-transition新增display-directive属性(关闭 #6453); - 输入:
n-input新增colorHover主题变量。
同期修复也很有参考价值:n-modal遮罩位于 scrollbar 内部时触发的Blocked aria-hidden on an element because its descendant retained focus警告(关闭 #7556)、n-color-picker传入的 style 与 click 事件不生效(关闭 #7528)、n-data-table的scrollTo方法类型缺失(关闭 #7554)、n-space的size属性设为0时不生效(关闭 #7530)、n-input-otp在浏览器扩展自动填充时只保留最后一个字符(关闭 #7540)、n-menu折叠状态下type="group"分组图标未居中(关闭 #8105)等,都是真实用户场景的反馈结果。
2.45.1 与 2.45.2:快速修复轮
2.45.1(2026-08-20)一次性新增了 afZA、amET、beBY、bgBG、bnBD 等 40+ 个 locale(见下文 i18n 小节),并修复了ugCNlocale 未导出、n-data-table/n-equation未包裹n-config-provider时的injection "n-config-provider" not found警告、useDialog/useNotification回调被误识别为数组(关闭 #8186)、n-dropdown的on-update:show触发两次、n-data-table在keep-alive内恢复显示报错等问题。
2.45.2(2026-08-21)则是针对n-ellipsis、n-modal遮罩关闭、n-data-table空数据表头滚动位置的集中修复。从三个连续小版本的发布节奏可以看出,naive-ui 在大型功能发版后会通过快速 patch 轮收敛回归问题。
组件 API 的演进:以高频组件为例
CHANGELOG 是观察组件 API 设计演化的最佳窗口。下面以几个代表性组件为例,说明其能力是如何逐版本累积的。
表单(n-form / n-form-item)
表单体系在 2.x 阶段经历了明显的「能力外溢」:
- 校验能力:
FormItemRule增加renderMessage(2.29.1)、level: 'warning'(2.37.0,用于显示异常值但不阻塞提交)、validate-messages(2.27.0);n-form的validate方法返回 Promise 且支持回调(2.24.0 修复 Promise 与 validateCallback 的兼容); - 布局与样式:
label-width支持auto(2.24.0)、require-mark-placement新增'right-hanging'选项(2.24.0)、show-label(2.16.5)、content-class/content-style/feedback-class/feedback-style(2.43.0、2.38.2)、labelFontWeight主题变量(2.34.3); - 实例方法:
n-form-item增加invalidateLabelWidth方法,n-form增加invalidateLabelWidths方法(2.43.0)。
数据表格(n-data-table)
n-data-table是 naive-ui 中复杂度最高的组件之一,其演进几乎贯穿整个 CHANGELOG:
- 数据能力:树形数据(2.9.0)、行展开(2.2.0)、多列排序(2.19.5)、列宽可调整
resizable(2.33.4)、default-expand-all(2.30.4)、customNextSortOrder(2.43.0); - 虚拟滚动:2.8.0 引入
virtual-scroll,2.40.0 进一步新增virtual-scroll-x、virtual-scroll-header、height-for-row、header-height、min-row-height,用于支持大量列数据的虚拟滚动; - 方法与回调:
scrollTo(2.30.4)、downloadCsv(2.37.0,同时修复其导出选择列/展开列的问题)、getFilteredAndSortedData/getCurrentPageData(2.45.0)、on-scroll(2.29.1)、on-update:checked-row-keys传递行数据与状态(2.33.4)、shift 多选(2.17.0); - 导出:2.40.2 新增
get-csv-header、get-csv-cell属性,配合allowExport(2.40.0)可精细化控制 CSV 导出内容。
日期选择器(n-date-picker)
n-date-picker的type属性从基础的date/datetime逐步扩展到month(2.19.5)、quarter(2.22.0)、year(2.20.3)、week(2.37.0)、monthrange(2.28.3)、quarterrange/yearrange(2.30.7),体现了范围类业务需求的持续涌入。其格式化体系也逐步完善:value-format、formatted-value、default-formatted-value、on-update:formatted-value(2.24.0),以及 2.40.2 的date-format、calendar-day-format、calendar-header-year-format等系列属性。
2.44.0 还新增了fast-year-select、fast-month-select参数,用于年月快速跳转;2.24.2 起支持在date、datetime、daterange、datetimerange类型下快速导航到特定年月。
弹层类组件(n-modal / n-drawer / n-popover)
弹层体系的演进聚焦于「焦点管理」与「命令式 API」:
- 2.24.2 为
n-modal、n-drawer一次性补齐close-on-esc、auto-focus、trap-focus、on-esc属性; - 2.41.0 为
n-modal、useDialog、useModal增加draggable参数(关闭 #6525 等多个 issue); - 2.43.0 起 Modal 内部的关闭按钮不再可键盘聚焦、不再是默认焦点;
- 2.45.0 修复了
dialog/confirm预设下positive-click、negative-click、close事件不生效以及card预设下close被触发两次的问题(关闭 #8188); n-popover持续增强自动位置调整能力(2.21.2)、footer插槽与footer-style(2.31.0)、scrollable(2.28.3)、arrow-point-to-center(2.26.0)、z-index(2.19.0)。
命令式 API 的建立
naive-ui 的 message / notification / dialog / loading-bar 在 2.29.1 迎来里程碑:新增createDiscreteApi,可以在 setup 之外使用这些反馈组件;2.33.4 起createDiscreteApi会返回 Vue app。此前useMessage、useDialog、useNotification的实例方法与选项也在不断扩充:useMessage.create(2.25.7)、useDialogReactiveList(2.33.0)、DialogOptions支持class(2.33.0)、useDialog支持z-index(2.43.0)、useModal.render函数(2.43.0)。
新增组件时间线
从 CHANGELOG 可以还原出每个组件的「出生时间」,这对于评估组件成熟度很有帮助:
| 版本 | 新增组件 |
|---|---|
| 2.2.0 | n-mention |
| 2.4.0 | n-image、n-global-style、n-theme-editor、n-page-header |
| 2.5.0 | n-skeleton、n-calendar、n-color-picker |
| 2.9.0 | (树形表格能力) |
| 2.13.0 | n-tree-select |
| 2.14.0 | n-carousel、useThemeVars |
| 2.19.5 | n-scrollbar、n-collapse-transition |
| 2.21.0 | n-tab、n-performant-ellipsis(2.35.0) |
| 2.23.2 | n-avatar-group、n-countdown、n-number-animation |
| 2.25.3 | n-watermark |
| 2.25.2 | n-icon-wrapper(2.25.0) |
| 2.34.0 | n-equation |
| 2.36.0 | n-split、n-virtual-list、n-qr-code、n-infinite-scroll(2.38.2) |
| 2.37.0 | n-flex |
| 2.38.0 | n-modal-provider+useModal、n-float-button、n-float-button-group |
| 2.40.0 | n-highlight |
| 2.40.2 | n-marquee |
| 2.41.1 | n-input-otp |
| 2.43.0 | n-heatmap、n-image-preview |
值得注意的是 2.32.0 对n-transfer的 UI 完全重构,旧组件重命名为n-legacy-transfer并计划在下一个主版本移除——这是「渐进式重构」的典型案例,仓库 src/legacy-transfer 与 src/transfer 两个目录并存即是该策略的源码体现。
国际化(i18n)的持续扩张
CHANGELOG 中 i18n 条目几乎贯穿每个版本,是语言覆盖范围不断扩大的直接记录:
- 早期版本陆续新增 frFR(2.21.5)、jaJP(2.19.8)、koKR(2.28.1)、ruRU(2.16.3)、zhTW(2.22.0)、deDE(2.20.2)等;
- 2.45.1 一次性新增 40+ 个 locale,包括 afZA、amET、beBY、bgBG、bnBD、caES、elGR、esES、euES、fiFI、filPH、glES、guIN、heIL、hiIN、hrHR、huHU、hyAM、isIS、kaGE、kkKZ、knIN、kyKG、loLA、ltLT、lvLV、mkMK、mlIN、mnMN、mrIN、msMY、myMM、neNP、paIN、ptPT、rmCH、roRO、siLK、slSI、sqAL、srRS、swKE、taIN、teIN、urPK、zuZA;
- 2.45.0 新增 nnNO locale、更新 nbNO locale,并翻译了日文 locale 中的
DatePicker.weekPlaceholder。
这些 locale 在仓库中的落点是 src/locales/common 与 src/locales/date 两个目录(各 79 个文件),并由 src/locales/index.ts 统一导出,例如afZA、amET、enUS等。此外 2.20.3 新增的createLocale方法允许用户自定义国际化,2.24.2 起n-number-animation跟随 config provider 国际化,体现了「语言包可覆盖、可扩展」的设计。
破坏性变更的演进脉络
对于升级用户而言,Breaking Changes 是 CHANGELOG 中优先级最高的部分。梳理 2.x 阶段的破坏性变更,可以归纳出几类常见动机:
- 命名修正:如
n-date-picker的time-picker-format之前被错误拼写为timer-picker-format(2.42.0);n-scrollbar的scrollTo(x, y)参数顺序与文档不符(2.38.0);n-input的type='input'重命名为type='text'(2.16.0); - API 语义调整:
n-rate的default-value默认值从0改为null(2.33.0);n-popover的placement默认值改为'top'(2.10.0);n-select点击清空按钮默认会删除通过tag创建的选项(2.44.0); - DOM/样式结构变化:
n-color-picker重构 DOM 结构(2.44.0)、n-card的n-card__content类名改为n-card-content(2.44.0)、n-data-table在列外包裹 div 容器(2.34.0); - 行为收紧:
n-button、n-switch在loading状态下不可再被点击(2.22.0、2.23.0)、Modal 内部关闭按钮不再可键盘聚焦(2.43.0); - 组件级重构:
n-transfer重构为n-legacy-transfer(2.32.0)、n-menu不再支持插槽 API(1.4.0)。
同时,CHANGELOG 也记录了「废弃 → 替代」的完整路径,例如n-tree-select/n-cascader的leaf-only属性废弃、改用check-strategy="child"(2.17.0),n-affix的offset-top/offset-bottom废弃、改用trigger-top/trigger-bottom(2.11.0),n-collapsed-transition的collapsed属性废弃、改用show(2.20.0)。
性能、工程化与类型体系演进
除组件功能外,CHANGELOG 同样记录了底层工程能力的迭代:
- 构建产物形态:ES module 打包在 2.38.0 引入(
/dist/index.mjs与/dist/index.prod.mjs),2.37.0 将package.json的module属性由es/index.js改为es/index.mjs;UMD 打包在 2.30.3 提供;2.33.4 曾移除兼容性较差的exports字段,2.32.2 又重新加入——这些波折反映了打包兼容性探索的真实过程; - 依赖治理:2.40.0 将
date-fns升级到 V3;2.44.0 将 katex 升级到0.16.28并移除@types/katex依赖;2.43.1 修复 esm 产物误用lodash而非lodash-es; - 类型系统:2.41.0 起(需要 Vue 3.3+)为所有组件增加插槽的类型标注;2.24.0 增加 volar 类型支持;2.31.0 导出所有组件的 props 对象;2.32.0 修复所有组件导出的 props 类型属性误为
readonly的问题;2.24.0 修复PageHeaderProps类型命名的拼写错误(原PageHeaderPorps); - 性能优化:2.8.0 优化
n-data-table初始渲染、n-select打开耗时、n-anchor滚动性能;2.30.2 优化n-select关闭菜单时的选项重算;2.42.0 优化图层过多导致的滚动性能问题。
用 CHANGELOG 指导升级与排障
基于以上分析,可将 CHANGELOG 的实际用法总结为四步:
- 升级前:定位目标版本与当前版本之间的所有Breaking Changes,逐一评估是否影响现有代码。重点关注命名修正类(涉及拼写错误修复,如
time-picker-format)、默认值变化类(如n-rate默认值)与行为收紧类(如 loading 状态下禁止点击); - 升级后验证:对照该版本的Fixes列表检查已知回归场景,例如 2.45.x 的
n-modal事件问题、n-dropdown的on-update:show重复触发,都是发布说明中明示过的高频坑位; - 功能检索:当需要某个能力时,直接在 CHANGELOG 中按组件名搜索,可以快速确认该能力是否存在、在哪个版本引入(例如「
n-data-table虚拟滚动」可以定位到 2.8.0 的virtual-scroll与 2.40.0 的virtual-scroll-x); - 排障对照:遇到报错时(如
injection "n-config-provider" not found、Blocked aria-hidden...警告),在 Fixes 中检索关键词,往往能找到已知根因、对应 issue 与修复版本。
需要说明的是,CHANGELOG 中引用的 issue 链接指向项目在 GitHub 上的议题,本文未复述这些外部链接;如需追溯某个修复的讨论过程,可参考文档内保留的 issue 编号(如 #8188、#8191 等)在对应平台检索。仓库根目录的 README.md 提供了组件的完整使用文档,src/components.ts 列出了当前全部组件模块的导出,src/locales/index.ts 则展示了可用的语言包清单,三者与 CHANGELOG 配合即可完成「文档 → 源码 → 变更记录」的闭环检索。
结语
naive-ui 的 CHANGELOG 远不止是一份发布流水账:它记录了一个 Vue 3 组件库在表单校验、虚拟滚动、命令式 API、RTL、国际化、构建体系等多个维度上的完整演进轨迹,也如实呈现了重构、废弃与回退的过程。对于使用者,它是升级决策的依据;对于组件库开发与设计,它是一份可长期参考的 API 设计案例集。当你下一次需要回答「某个能力是哪个版本引入的」「这次升级会不会破坏现有代码」「这个警告的已知修复是什么」时,不妨先从这份 4300 余行的中文 CHANGELOG 开始。
- 前端
- UI组件
【免费下载链接】naive-ui
A Vue 3 Component Library. Fairly Complete. Theme Customizable. Uses TypeScript. Fast.
相关推荐
从网页到电子书:WebToEpub如何解决网络阅读的三大痛点
从网页到电子书:WebToEpub如何解决网络阅读的三大痛点 你是否曾经为无法离线阅读喜爱的网络小说而感到烦恼?当网络连接不稳定或需要长时间离线时,网页内容就成
前端UI组件设计系统Paperless-ngx 版本演进全解:从 changelog 读懂 v3.0 架构重构与 3.x 迭代脉络
Paperless ngx 版本演进全解:从 changelog 读懂 v3.0 架构重构与 3.x 迭代脉络 本篇技术文章以 docs/changelog.m
后端前端全文检索OCR知识管理Inngest 版本演进全解析:从 CHANGELOG 读懂开源工作流编排平台的迭代脉络
Inngest 版本演进全解析:从 CHANGELOG 读懂开源工作流编排平台的迭代脉络 导读 本文以 Inngest 仓库根目录下的 CHANGELOG.md
后端任务调度工作流自动化微服务
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考