尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ant-design-vue 从 3.x 升级到 4.x 完整迁移指南:CSS-in-JS 重构、API 变更与兼容性处理

ant-design-vue 从 3.x 升级到 4.x 完整迁移指南:CSS-in-JS 重构、API 变更与兼容性处理 前端UI组件设计系统【免费下载链接】ant-design-vue An enterprise-class UI components based on Ant Design and Vue. 项目地址https://gitcode.com/gh_mirrors/an/ant-design-vue点击查看免费下载本文基于 ant-design-vue 官方迁移文档migration-v4.zh-CN.md编写并结合当前仓库源码对技术细节进行印证与扩展帮助你系统、平滑地完成 ant-design-vue3.x→4.x的版本升级。读完本文你将掌握 4.x 的破坏性变更全貌、visible/dropdownClassName等旧 API 的替换方法、less 变量到 Design Token 的迁移路径以及移除babel-plugin-import和兼容旧浏览器的完整实操方案。如果你当前还在使用2.x或更老的版本请先参考 migration-v3 升级文档 升级到 3.x再按照本文迁移到 4.x。升级准备正式开始升级前先完成一项前置工作请先升级到 3.x 的最新版本并按照控制台 warning 信息移除/修改相关的 API。这样做的目的是让 3.x 中已被标记废弃的 API 尽早暴露出来在进入 4.x 之前就把「已被移除」的用法清理干净把升级风险分散到可控的步骤中。建议在升级前使用 git 保存当前代码便于随时回滚对比。4.0 有哪些不兼容的变化ant-design-vue 4.0 是一次以「设计规范升级 样式架构重构」为核心的大版本更新。下面按设计规范、技术架构、兼容性三个维度拆解。设计规范调整基础圆角调整由统一的2px改为四级圆角分别为2px、4px、6px、8px分别应用于不同场景。例如默认尺寸的 Button 圆角调整为了6px。主色调整由#1890ff改为#1677ff。整体阴影调整由原本的三级阴影调整为两级分别用于常驻页面的组件如 Card和交互反馈如 Dropdown。部分组件内间距调整。整体去线框化弱化边框在视觉中的占比更加突出层次与色彩表达。这些调整在源码层的落点可以从 components/theme 目录看到圆角、颜色、阴影等基础值统一由 Design Tokenseeds.ts、interface、themes/default等驱动例如默认算法defaultAlgorithm会基于defaultSeed计算生成全套 MapToken详见 components/theme/index.ts组件样式再通过genComponentStyleHook消费这些 Token。技术调整弃用 less全面采用 CSS-in-JS所有 less 文件全部移除less 变量不再支持透出。这意味着你不能再import组件库内部的 less 文件也无法通过修改 less 变量来定制主题。产物中不再包含 css 文件。由于 CSS-in-JS 本身支持按需引入原本的ant-design-vue/dist/antd.css已经被移除。如果你需要重置一些基本样式请引入ant-design-vue/dist/reset.css。该文件对应仓库中的 components/style/reset.css包含box-sizing: border-box、body { margin: 0 }、标题/段落/列表默认间距、表单控件外观归一化等基础重置规则。如果你需要组件重置样式但又不想引入ant-design-vue/dist/reset.css以免污染全局样式可以在应用最外层使用 App 组件解决原生元素没有 ant-design-vue 规范样式的问题。App 组件的源码位于 components/app/index.tsx它通过useStyle生成带 hashId 的样式作用域并将 message、notification、modal 的上下文实例统一注入到应用中。什么是 CSS-in-JS简单说样式不再是独立编译出来的静态 css 文件而是在运行时由 JS 生成并注入style标签每个组件的样式会带上基于设计变量的 hash 值。这样主题可以动态切换、样式天然按需、不再依赖打包器做样式抽取代价则是运行时多了一点样式生成开销。移除 css variables 及动态主题方案4.x 移除了 css variables 以及在其之上构筑的动态主题方案主题定制统一走新的 Design Tokenseed token algorithm体系。相关的主题定制说明可以参阅 customize-theme 文档。LocaleProvider 彻底移除LocaleProvider在 3.x 中已经废弃官方推荐使用ConfigProvider locale /替代4.x 中彻底移除了相关目录ant-design-vue/es/locale-provider、ant-design-vue/lib/locale-provider。对应地仓库中的国际化实现集中在 components/locale 与 components/config-provider 中通过ConfigProvider的locale属性下发。不再支持 babel-plugin-importCSS-in-JS 本身具有按需加载的能力不再需要该插件支持babel-plugin-import已从官方推荐用法中移除具体操作见下文「移除 babel-plugin-import」。兼容性调整不再支持 IE 浏览器。如果你仍需支持 IE 11、360 浏览器等旧环境请参考下文「旧版浏览器兼容」一节通过StyleProvider处理。组件 API 调整弹框 classname API 统一为 popupClassName所有组件弹框的 className 类 API 统一为popupClassNamedropdownClassName等类似 API 都会被替换涉及组件AutoCompleteCascaderSelectTreeSelectTimePickerDatePickerMentionstemplate a-select -- dropdownClassNamemy-select-popup popupClassNamemy-select-popup / /template弹框受控可见 API 统一为 open组件弹框的受控可见 API 统一为openvisible等类似 API 都会被替换Drawervisible→openModalvisible→openDropdownvisible→openTooltipvisible→openTagvisible已移除使用v-if控制显隐Slidertooltip相关 API 收敛到tooltip属性中tooltipVisible→tooltip.openTablefilterDropdownVisible→filterDropdownOpentemplate -- a-modal :visiblevisiblecontent/a-modal a-modal :openvisiblecontent/a-modal -- a-tag :visiblevisibletag/a-tag a-tag v-ifvisibletag/a-tag a-table :data[] :columns[ { title: Name, dataIndex: name, -- filterDropdownVisible: visible, filterDropdownOpen: visible, }, ] / -- a-slider :tooltipVisiblevisible / a-slider :tooltip{ open: visible } / /template script setup import { ref } from vue; const visible ref(true); /scriptgetPopupContainer 与 Drawer 属性迁移getPopupContainer所有的getPopupContainer都需要保证返回的是唯一的 div避免多个弹层挂载到同一容器导致层级错乱。Drawerstyle和class迁移至 Drawer 弹层区域上原属性替换为rootClassName和rootStyle。组件重构与移除移除locale-provider目录。LocaleProvider在 v4 中已移除请使用ConfigProvider替代。移除栅格布局中的xxxl断点属性。xxxl属性已经在 v4 被移除你可以使用 主题定制 修改screen[XS|SM|MD|LG|XL|XXL]来修改断点值实现。在 components/theme/convertLegacyToken.ts 中可以看到screen-xs到screen-xxl等断点变量正是以 Token 形式参与计算的。BackTop 组件在4.0.0中废弃功能移至 FloatButton 悬浮按钮中。如需使用可以从 FloatButton 中引入。仓库中该组件的实现已迁移到 components/float-button/BackTop.tsx并作为 FloatButton 的导出项提供可参考 components/float-button/demo/back-top.vue 的用法示例。开始升级通过 git 保存你的代码然后安装 4.x 依赖npm install --save ant-design-vue4.x安装完成后重点处理以下三类迁移工作less 变量迁移、移除babel-plugin-import、旧版浏览器兼容。less 迁移如果你使用到了 ant-design-vue 的 less 变量可以通过官方提供的兼容包将 v4 的 Design Token 转译成 v3 风格的 less 变量并通过 less-loader 注入const { theme } require(ant-design-vue/lib); const convertLegacyToken require(ant-design-vue/lib/theme/convertLegacyToken); const { defaultAlgorithm, defaultSeed } theme; const mapToken defaultAlgorithm(defaultSeed); const v3Token convertLegacyToken(mapToken); // Webpack Config module.exports { // ... other config loader: less-loader, options: { lessOptions: { modifyVars: v3Token, }, }, };这套转换逻辑的实现就在仓库的 components/theme/convertLegacyToken.ts 中它接收由defaultAlgorithm(defaultSeed)生成的 MapToken经过formatToken别名展开后映射为完整的 v3 less 变量表涵盖色彩primary-color、info-color、success-color、warning-color、error-color及primary-1~primary-10色阶、基础尺寸font-size-base、border-radius-base、control-border-radius、间距padding-lg~padding-xss、margin-lg~margin-xss、高度height-base、height-lg、height-sm、阴影box-shadow-base、shadow-1-up等以及 Button、Checkbox、Menu、Table、Modal、Form 等各组件级变量最后通过less-loader的modifyVars注入到你的业务 less 中。同时移除对 ant-design-vue less 文件的直接引用// Your less file -- import (reference) ~ant-design-vue/es/style/themes/index; or -- import ~ant-design-vue/es/style/some-other-less-file-ref;需要注意convertLegacyToken输出的是「默认主题」下的变量值源码中硬编码了theme: default。如果你过去通过 less 变量做过深度定制建议迁移到 4.x 的 Token 定制体系如ConfigProvidertheme属性而不是长期依赖这份兼容映射。移除 babel-plugin-import从 package.json 中移除babel-plugin-import并从.babelrc移除该插件plugins: [ -- [import, { libraryName: ant-design-vue, libraryDirectory: lib}, ant-design-vue], ]移除后组件与样式仍然按需生效这正是 CSS-in-JS 方案带来的能力样式由组件自身在渲染时注入不再依赖构建期插件去「挑拣」样式文件。旧版浏览器兼容Ant Design Vue v4 使用:wherecss selector 降低 CSS-in-JS hash 值优先级如果你需要支持旧版本浏览器如 IE 11、360 浏览器等可以通过StyleProvider去除降权操作。在源码中可以看到这层机制的具体实现components/_util/cssinjs/hooks/useStyleRegister/index.tsx 中的injectSelectorHash会根据hashPriority决定生成:where(.ant-hash-class)还是普通类选择器而 components/_util/cssinjs/StyleContext.tsx 将hashPriority的默认值设为low即默认使用:where降权。当在StyleProvider上设置hashPriorityhigh时样式选择器将不再包裹在:where中从而在旧浏览器上获得正确的优先级表现。详细的配置说明请参阅 compatible-style 文档。迁移自查清单完成上述步骤后建议对照以下清单逐项自查确保升级完整检查项说明依赖版本npm ls ant-design-vue确认已安装 4.xless 引用全局搜索ant-design-vue/es/style、ant-design-vue/lib中的 less import 并移除主题定制将theme定制迁移到ConfigProvider的theme属性 / Design Token 体系弹层 API全局搜索dropdownClassName、visible结合组件上下文并替换为popupClassName、open国际化将LocaleProvider替换为ConfigProvider locale断点检查 Grid 是否使用了已移除的xxxl属性BackTop将a-back-top替换为 FloatButton 中的 BackTop 用法浏览器目标若需兼容 IE 11 / 360 浏览器在应用外层包裹StyleProvider并设置hashPriorityhigh全局重置按需引入ant-design-vue/dist/reset.css或使用 App 组件处理原生元素样式遇到问题如果你在升级过程中遇到了问题可以到 ant-design-vue 官方 GitHub issues 进行反馈维护团队会尽快响应并持续改进迁移文档。延伸阅读3.x 迁移文档migration-v3从 2.x 升级到 3.x 的路径老版本用户请先完成这一步。主题定制customize-theme了解 4.x 的 Design Token 与算法default/dark/compact定制体系。兼容性调整compatible-styleStyleProvider与:where选择器的完整说明。快速上手getting-started确认 4.x 的引入与按需加载方式。样式与主题 Token 源码convertLegacyToken.ts、defaultAlgorithm、defaultSeed等实现细节。赞分享前端UI组件设计系统【免费下载链接】ant-design-vue An enterprise-class UI components based on Ant Design and Vue. 项目地址https://gitcode.com/gh_mirrors/an/ant-design-vue点击查看免费下载相关推荐Easy Rules 4.0迁移终极指南从3.x到4.x的完整API变更处理Easy Rules 4.0迁移终极指南从3.x到4.x的完整API变更处理 Easy Rules是Java生态中备受青睐的轻量级规则引擎从3.x升级到4.后端Keploy 安装与上手3 分钟装好测试与存根自动生成工具跑通验证Keploy 安装与上手3 分钟装好测试与存根自动生成工具跑通验证 Keploy 是一款面向开发者的测试与存根自动生成工具它在网络层拦截真实流量把应用调测试开发工具接口测试CocoaLumberjack 3.x迁移指南API变更与兼容性处理CocoaLumberjack 3.x迁移指南API变更与兼容性处理 迁移痛点与收益 你是否在升级CocoaLumberjack到3.x版本时遇到编译错误是开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表