ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Vant 4.0 版本全解析:深色模式、新组件体系与工程化升级指南

Vant 4.0 版本全解析:深色模式、新组件体系与工程化升级指南 Vant 4.0 版本全解析深色模式、新组件体系与工程化升级指南【免费下载链接】vantA lightweight, customizable Vue UI library for mobile web apps.项目地址: https://gitcode.com/GitHub_Trending/va/vant本文基于 Vant 官方《4.0 版本介绍》文档结合当前仓库源码系统梳理 Vant 4.0 的核心变化深色模式、五个新组件、安装体积与包体积优化、主色调统一、按需引入方式调整、Picker 重构、工具函数与事件命名调整以及配套的 Vant Cli 5.0 与升级路径。读完本文你将完整掌握 Vant 4.0 相比 Vant 3 的破坏性变更清单、新 API 的正确用法以及从 v3 平滑迁移到 v4 的实操方案。引言Vant 的第四个重要版本历经一年迭代Vant 4.0 已正式发布这是 Vant 自 2017 年开源以来发布的第四个重要版本。本次迭代的核心工作包括支持深色模式、新增五个组件、改善工具函数 API、重构 Picker 等组件并继续在轻量化和易用性两个方向上做出改进。从当前仓库的组件目录packages/vant/src可以看到Vant 4 的组件体系由 action-bar、back-top、calendar、picker、picker-group、skeleton 等 60 余个模块构成其中back-top、date-picker、time-picker、picker-group及skeleton-*系列子组件正是 4.0 新增能力的落点。支持深色模式Vant 4.0 支持将全部组件一键切换为深色模式。你只需要把ConfigProvider组件的theme属性设置为dark即可让页面上的所有 Vant 组件变成深色风格van-config-provider themedark !-- child components -- /van-config-provider从源码实现看这一能力由 ConfigProvider.tsx 提供组件通过makeStringPropConfigProviderTheme(light)声明theme属性取值类型为light | dark默认light。在setup中它会在浏览器环境下监听theme变化动态向document.documentElement添加或移除van-theme-${theme}类名const addTheme () { document.documentElement.classList.add(van-theme-${props.theme}); }; const removeTheme (theme props.theme) { document.documentElement.classList.remove(van-theme-${theme}); };见 ConfigProvider.tsx也就是说深色模式本质上是向根元素注入主题类名配合样式文件中定义在van-theme-dark作用域下的深色 CSS 变量族生效。文档网站本身同样支持深色模式切换。关于深色模式下主题变量的精细控制4.0 还额外提供了themeVarsDark与themeVarsLight两个属性配合themeVarsScopelocal | global默认local决定样式变量是作用于局部容器还是同步到根节点详见下文样式变量类型提示一节。几个新组件Vant 4.0 包含以下新组件组件用途BackTop 回到顶部返回页面顶部的操作按钮TimePicker 时间选择器用于时间选择包括时、分、秒DatePicker 日期选择器用于日期选择包括年、月、日PickerGroup 选择器组结合多个 Picker 选择器在一次交互中完成多个值的选择Skeleton 骨架屏子组件通过 SkeletonTitle、SkeletonImage、SkeletonAvatar 等子组件自定义骨架屏其中TimePicker 和 DatePicker 由旧版的 DatetimePicker 组件拆分而来DatetimePicker 组件在 4.0 中不再提供。你可以通过 PickerGroup 来实现同时选择日期和时间的交互效果。以 DatePicker 为例DatePicker.tsx 在 Picker 之上声明了columnsType默认[year, month, day]、minDate默认当前年份减 10 年的 1 月 1 日、maxDate默认当前年份加 10 年的 12 月 31 日等属性内部复用 Picker 渲染滚动列并通过formatValueRange、getMonthEndDay等工具见 utils.ts处理每月的天数边界避免旧版 DatetimePicker 在跨月、闰年等边界场景下的历史 bug。同时Skeleton 从单一组件扩展为骨架屏组件族skeleton、skeleton-avatar、skeleton-image、skeleton-paragraph、skeleton-title在仓库中均有独立模块见 packages/vant/src允许开发者像拼积木一样自由组合骨架屏。保持轻量Vant 4.0 的安装体积降低约 30%包体积保持轻量。随着 npm 生态的发展node_modules 正在吞噬磁盘空间。为了缓解 node_modules 黑洞、加快安装速度Vant 对 npm 依赖和构建产物进行了优化。安装体积相较于 Vant 3.6.2Vant 4.0.0 的安装体积由 7MB 下降至 5MB。作为对比社区中主流组件库的安装体积普遍在 15MB ~ 80MB。你可以通过 packagephobia 网站查询 npm 包的安装体积。包体积本次更新加量不加价Minified Gzipped 后的体积保持在 70KB 以下。需要说明的是以上数据来自 Vant 官方 4.0 发布文档用于描述 4.0.0 版本发布时的实测结果具体数值会随版本迭代波动建议以实际安装测量为准。统一主色调Vant 4.0 统一了所有组件的主色调。在之前的版本中Vant 组件存在两种主色调部分组件采用蓝色#1989fa另一部分采用红色#ee0a24。为保持色彩规范的一致性Vant 4 将所有组件统一为蓝色主色调。这一点在源码中可以直接验证css-variables.less 中定义--van-primary-color: var(--van-blue);其中--van-blue: #1989facss-variables.less即所有组件通过--van-primary-color间接引用统一的蓝色而不再有组件直接引用红色变量作为主色。统一主色调后主题定制变得更加容易。例如你可以覆盖--van-primary-color这个 CSS 变量将所有组件的主色调设置为绿色:root { --van-primary-color: #07c160; }由于组件样式统一消费该变量一处覆盖即可全局生效这正是 Vant 4 全面转向 CSS 变量主题定制体系的基础。按需引入方式调整Vant 4.0 不再使用 babel-plugin-import 实现按需引入。早期组件库大多依赖babel-plugin-import做按需引入这意味着组件库会强依赖 Babel 编译。从 Vant 4.0 开始不再支持babel-plugin-import主要带来以下收益不再强依赖 Babel 编译项目可以使用 SWC、esbuild 等现代编译工具进而提升编译效率。不再受 import 限制可以从 Vant 中导入除组件以外的内容比如 Vant 4 中新增的showToast方法或是buttonProps对象import { showToast, buttonProps } from vant;在包体积方面移除babel-plugin-import对项目的 JS 体积没有负面影响因为 Vant 默认支持通过Tree Shaking移除不需要的 JS 代码而 CSS 代码可以通过 unplugin-vue-components。需要提醒的是由于移除了 Babel 插件路径Vant 4 的源码采用 ES Module 构建并保留sideEffects元数据使用 Vite / Rollup / Webpack 等支持 Tree Shaking 的构建工具均可正常摇树优化。样式变量类型提示Vant 4.0 提供了样式变量的类型提示。Vant 提供了 700 多个样式变量你可以通过 CSS 代码或ConfigProvider组件修改这些样式变量。在 Vant 4.0 中新增了ConfigProviderThemeVars类型为样式变量提供完整的类型提示。因此在编写 TypeScript 代码时你可以通过类型提示自动补全主题变量名称避免手写字符串拼错。从源码结构看types.ts 将ConfigProviderThemeVars定义为BaseThemeVars与 60 余个组件ActionBar、Button、Calendar、Field、Picker、Popup、Toast、Uploader 等各自声明的ThemeVars的交集类型。其中BaseThemeVars覆盖了色板black、white、gray1~gray8、red、blue、orange、green等渐变与组件色gradientRed、primaryColor、successColor、dangerColor、warningColor、textColor系列、background系列间距、字体、动画、边框、圆角paddingBase~paddingXl、fontSizeXs~fontSizeLg、durationBase、borderColor、radiusSm~radiusMax等。而ConfigProvider在运行时会把驼峰形式的变量名转换为--van-*CSS 变量mapThemeVarsToCSSVars先通过kebabCase转中划线再用insertDash把gray1之类的名称规范为gray-1最终生成--van-${formattedKey}形式的 CSS 变量见 ConfigProvider.tsx。这就是TS 类型提示 → CSS 变量注入的完整链路。Picker 组件重构Vant 4.0 重构了 Picker 组件以及基于 Picker 的 Area 和 DatetimePicker 组件。在之前的版本中Picker 的 API 设计不够合理常见问题包括Picker 的columns数据格式不合理容易产生误解Picker 的数据流不清晰暴露了过多实例方法用于操作数据DatetimePicker 逻辑过于复杂经常在边界场景下出现 bug。为解决上述问题Vant 4.0 对Picker进行了重构同时重构了基于 Picker 派生出的Area与DatetimePicker组件。重构后的 Picker 采用更明确的数据流通过v-model双向绑定选中值列数据通过columns传入并配合PickerColumn、PickerToolbar等内部模块实现渲染与确认逻辑见 packages/vant/src/picker。如果你在项目中使用了 Picker、Area 或旧版 DatetimePicker 这三个组件请阅读「升级指南」完成迁移。组件工具函数调整Vant 4.0 调整了组件工具函数的用法使其更符合直觉。Vant 3 提供了一些组件工具函数例如调用Dialog()函数可以快速唤起全局弹窗而Dialog.Component才是 Dialog 对应的组件对象// Vant 3 的函数调用 Dialog({ message: Hello World! }); // Vant 3 的组件注册 app.use(van-dialog, Dialog.Component);以上 API 设计导致 Dialog 等支持工具函数的组件与常规组件存在用法差异容易被误用同时也导致unplugin-vue-components无法自动引入 Dialog 等组件。为了更符合直觉Vant 4 调整了组件工具函数的调用方式受影响的函数包括Dialog()、Toast()、Notify()和ImagePreview()。以 Dialog 为例Dialog()函数被重命名为showDialog()并让Dialog直接指向组件对象// Vant 4 的函数调用 showDialog({ message: Hello World! }); // Vant 4 的组件注册 app.use(van-dialog, Dialog);从源码可以验证这一调整在 function-call.tsx 中showDialog(options)返回PromiseDialogAction | undefined内部通过mountComponent挂载 Dialog 实例Dialog模块则默认导出了组件对象见 Dialog.tsx。同时4.0 还配套提供了setDialogDefaultOptions、resetDialogDefaultOptions、showConfirmDialog、closeDialog等函数覆盖全局默认配置与关闭等场景function-call.tsx。存量代码兼容方案vant/compat为了便于存量代码迁移至 Vant 4.0官方提供了兼容包vant/compat其中导出的Dialog()函数可完全兼容原有代码import { Dialog } from vant/compat; Dialog({ message: Hello World! });vant/compat中导出的Dialog()与 Vant 3 中的Dialog()拥有完全一致的 API 和行为。查看 vant-compat/src/dialog.ts 可以看到它直接将Dialog包装为showDialog的调用别名并补齐了Dialog.Component、Dialog.alert、Dialog.confirm、Dialog.close、Dialog.setDefaultOptions、Dialog.resetDefaultOptions及Dialog.install等 Vant 3 的全部挂载属性。因此升级时你只需要修改引用路径其余代码可以保持不变。vant/compat同样为 Toast、Notify、ImagePreview 提供了对应兼容实现见 vant-compat/src/index.ts。在项目完成升级到 Vant 4.0 后建议在后续迭代中逐步替换为新的showToast、showDialog、showNotify、showImagePreview等方法并最终移除vant/compat依赖。事件命名调整Vant 4.0 将事件名改为驼峰格式。从 Vant 4 开始所有事件均采用 Vue 官方推荐的驼峰格式命名// Vant 3 emit(click-input); // Vant 4 emit(clickInput);这项改动不影响原有的模板代码Vue 会自动在模板中对事件名进行格式转换因此你无须做任何更改!-- 以下代码可以照常运行无须做任何更改 -- van-field click-inputonClick /如果你在JSX中使用 Vant 组件则需要将监听的事件名调整为驼峰格式原有的中划线格式不再生效——新的监听方式更符合 JSX 本身的规范// Vant 3 Field onClick-input{onClick} / // Vant 4 Field onClickInput{onClick} /移除 Less 变量Vant 4.0 不再支持通过 Less 变量定制主题。目前 Vant 已经支持基于 CSS 变量的主题定制相比 Less 定制更加灵活运行时可变、无需重新编译。因此Vant 4 不再提供基于 Less 的主题定制npm 包中将不再包含.less样式源文件仅提供编译后的.css样式文件。如果你正在使用旧版的 Less 主题定制方式请改用 ConfigProvider 全局配置 进行替换例如通过themeVars传入驼峰命名的变量对象或直接覆盖全局 CSS 变量。Vant Cli 5.0本次更新同步发布了 Vant Cli 5.0 版本。Vant Cli 是 Vant 底层的组件库构建工具基于 Vite负责组件编译、文档站点生成与发布等本次更新内容包括升级 Vite 到 3.0 版本并对相关的 Vite 插件进行升级不再默认安装stylelint和vant/stylelint-config依赖需要的话可以自行安装npm add stylelint13 vant/stylelint-config不再默认安装gh-pages依赖请按照如下方式更新 package.json- release:site: pnpm build:site gh-pages -d site-dist, release:site: pnpm build:site npx gh-pages -d site-dist,这一调整让组件库开发者可以按需选择 lint 与站点发布工具链进一步降低默认依赖体积。当前仓库中 Vant Cli 的源码与配置位于 packages/vant-cli含src/compiler、src/commands等模块可作为自定义组件库构建的参考实现。版本信息与维护状态目前 Vant 官网和 npmlatest标签均已指向 Vant 4.0。官方为 Vant 4.0 准备了完整的升级指南请阅读「从 v3 升级到 v4」 完成升级。后续 Vant 各个版本的维护状态如下名称框架发布时间维护状态Vant 4Vue 32022.12长期支持Vant 3Vue 32020.12终止支持不再接受 PRVant 2Vue 22019.06终止支持不再接受 PRVant 1Vue 22018.03终止支持不再接受 PR升级检查清单综合全文从 Vant 3 迁移到 Vant 4 时建议逐项核对以下变更点主题定制将 Less 变量定制迁移到 CSS 变量或ConfigProvider.themeVars按需引入移除babel-plugin-import配置改用全量引入 Tree ShakingCSS 按需引入改用unplugin-vue-components工具函数将Dialog()/Toast()/Notify()/ImagePreview()函数调用替换为showDialog()/showToast()等新 API或临时改用vant/compat兼容包组件注册Dialog.Component改为直接注册Dialog组件对象事件命名模板代码无需改动JSX 代码需将事件名改为驼峰格式如onClickInput选择器组件DatetimePicker已移除按需拆分使用DatePickerTimePickerPickerGroup并核对 Picker / Area 的columns数据格式与数据流 API 变化。完成以上核对后即可平滑升级到长期支持的 Vant 4.0享受深色模式、更轻量的安装体积、统一的主题体系与现代编译工具链带来的开发体验提升。【免费下载链接】vantA lightweight, customizable Vue UI library for mobile web apps.项目地址: https://gitcode.com/GitHub_Trending/va/vant创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表