umi3项目antd4升级为antd5小计

 一、升级原因

         原项目采用scale方案进行屏幕自适应后,许多antd的浮层组件(select、tooltip等)出现的浮层会错位,特别是分页器中页面选择下拉框的定位无法解决(浮层的定位是antd内部计算设置的,其他组件可通过getPopupContainer改变挂载节点勉强搞定),而antd5已适配这种情况下的浮层定位,故只得升级antd5。

二、升级流程

        结合官方v4-v5升级流程进行,因为该项目是umi3项目,配置稍微不同。

1、为保险起见,删除node_modules和.umi,安装antd5等依赖。

2、使用官方工具快速升级

npx -p @ant-design/codemod-v5 antd5-codemod src

3、为适配antd5,更新react、react-dom及对应的ts版本至18.x。

4、因为antd4使用less,antd5使用css-in-js,在尽量兼容原代码的情况下,使用官方loader进行兼容,在.umirc.ts文件中进行相关设置:

在defineConfig中设置

5、antd4使用moment,antd5使用dayjs,安装dayjs和antd-dayjs-webpack-plugin插件进行对原代码的兼容,此插件在编译时将moment的调用转为dayjs的调用(并不是所有的调用都能替换,有些方法会计算错误或报错,如moment(time, formart)这种方式会计算错误,需改写moment方法的调用或直接使用dayjs的方法)。

import AntdMomentWebpackPlugin from 'antd-dayjs-webpack-plugin';

在defineConfig中设置

chainWebpack(memo, { env, webpack, createCSSRule }) {

    memo.plugin('AntdDayjsWebpackPlugin').use(AntdDayjsWebpackPlugin)

  }

6、其余就是个别组件弃用方法的替换以及样式的调整适配。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您在使用 umi4 时引入了 Ant Design 组件库,并且在引入组件时路径大小写错误导致编译报错,可以尝试以下解决方案: 1. 确认路径是否正确,并检查大小写是否与实际路径一致。 2. 在 umi4 中,Ant Design 组件库的按需加载插件默认使用了 babel-plugin-import 插件,该插件默认情况下不区分大小写。如果您的组件库中存在大小写不一致的路径,可以通过在 .umirc.ts 或 config/config.ts 中配置 babel 插件来解决问题。 例如,您可以在 .umirc.ts 中添加以下配置: ```js export default { // ... babel: { plugins: [ [ 'import', { libraryName: 'antd', libraryDirectory: 'es', camel2DashComponentName: false, }, 'antd', ], ], }, // ... }; ``` 其中,`camel2DashComponentName` 为 `false` 表示禁用组件名转换,即保持组件名大小写一致。 3. 如果您使用的是 TypeScript,可以在 tsconfig.json 中添加路径别名,以避免路径大小写错误导致编译报错。 例如,您可以在 tsconfig.json 中添加以下配置: ```json { "compilerOptions": { // ... "baseUrl": ".", "paths": { "@ant-design/icons/lib/dist$": ["node_modules/@ant-design/icons/lib/dist/index.js"], "@ant-design/icons/lib$": ["node_modules/@ant-design/icons/lib/index.js"], "@ant-design/icons/lib/components$": ["node_modules/@ant-design/icons/lib/components/index.js"], "@ant-design/icons/lib/icons$": ["node_modules/@ant-design/icons/lib/icons/index.js"], "@ant-design/icons-react$": ["node_modules/@ant-design/icons-react/lib/index.js"], "@ant-design/icons-react/lib$": ["node_modules/@ant-design/icons-react/lib/index.js"], "@ant-design/icons-react/lib/components$": ["node_modules/@ant-design/icons-react/lib/components/index.js"], "@ant-design/icons-react/lib/icons$": ["node_modules/@ant-design/icons-react/lib/icons/index.js"], "@ant-design/react-native$": ["node_modules/@ant-design/react-native/lib/index.js"], "@ant-design/react-native/lib$": ["node_modules/@ant-design/react-native/lib/index.js"], "@ant-design/react-native/lib/components$": ["node_modules/@ant-design/react-native/lib/components/index.js"], "@ant-design/react-native/lib/style$": ["node_modules/@ant-design/react-native/lib/style/index.js"], "@ant-design/react-native/lib/utils$": ["node_modules/@ant-design/react-native/lib/utils/index.js"] } } } ``` 这样,您就可以在代码中使用路径别名来引入 Ant Design 组件,避免大小写错误导致编译报错。 希望以上解决方案对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值