antd icons 导致bundle体积过大

问题描述

antd 按需加载引入的,明明只是用了几个icon,然而bundle却多了几百KB

webpack-bundle-analyzer效果如下:

image.png

解决方案

官方出了个临时的解决方案

@issue https://github.com/ant-design/ant-design/issues/12011

大概思路是让你自己搞一个icon引入文件,把icon的默认库替换一下

1. 创建一个文件antd-icons.js

/* 列出你自己用到的@ant-design/icons的图标 */

/* 下面是antd默认使用到的icon */
export { default as CloseOutline } from '@ant-design/icons/lib/outline/CloseOutline'
export { default as CheckOutline } from '@ant-design/icons/lib/outline/CheckOutline'
export { default as LoadingOutline } from '@ant-design/icons/lib/outline/LoadingOutline'
export { default as CheckCircleOutline } from '@ant-design/icons/lib/outline/CheckCircleOutline'
export { default as InfoCircleOutline } from '@ant-design/icons/lib/outline/InfoCircleOutline'
export { default as CloseCircleOutline } from '@ant-design/icons/lib/outline/CloseCircleOutline'
export { default as ExclamationCircleOutline } from '@ant-design/icons/lib/outline/ExclamationCircleOutline'
export { default as CheckCircleFill } from '@ant-design/icons/lib/fill/CheckCircleFill'
export { default as InfoCircleFill } from '@ant-design/icons/lib/fill/InfoCircleFill'
export { default as CloseCircleFill } from '@ant-design/icons/lib/fill/CloseCircleFill'
export { default as ExclamationCircleFill } from '@ant-design/icons/lib/fill/ExclamationCircleFill'
export { default as UpOutline } from '@ant-design/icons/lib/outline/UpOutline'
export { default as DownOutline } from '@ant-design/icons/lib/outline/DownOutline'
export { default as LeftOutline } from '@ant-design/icons/lib/outline/LeftOutline'
export { default as RightOutline } from '@ant-design/icons/lib/outline/RightOutline'
export { default as RedoOutline } from '@ant-design/icons/lib/outline/RedoOutline'
export { default as CalendarOutline } from '@ant-design/icons/lib/outline/CalendarOutline'
export { default as SearchOutline } from '@ant-design/icons/lib/outline/SearchOutline'
export { default as BarsOutline } from '@ant-design/icons/lib/outline/BarsOutline'
export { default as StarFill } from '@ant-design/icons/lib/fill/StarFill'
export { default as FilterOutline } from '@ant-design/icons/lib/outline/FilterOutline'
export { default as CaretUpOutline } from '@ant-design/icons/lib/outline/CaretUpOutline'
export { default as CaretDownOutline } from '@ant-design/icons/lib/outline/CaretDownOutline'
export { default as PlusOutline } from '@ant-design/icons/lib/outline/PlusOutline'
export { default as FileOutline } from '@ant-design/icons/lib/outline/FileOutline'
export { default as FolderOpenOutline } from '@ant-design/icons/lib/outline/FolderOpenOutline'
export { default as FolderOutline } from '@ant-design/icons/lib/outline/FolderOutline'
export { default as PaperClipOutline } from '@ant-design/icons/lib/outline/PaperClipOutline'
export { default as PictureOutline } from '@ant-design/icons/lib/outline/PictureOutline'
export { default as EyeOutline } from '@ant-design/icons/lib/outline/EyeOutline'
export { default as DeleteOutline } from '@ant-design/icons/lib/outline/DeleteOutline'
export { default as UploadOutline } from '@ant-design/icons/lib/outline/UploadOutline'

2. 修改webpack配置

alias: {
    '@ant-design/icons/lib/dist$': path.resolve(
      __dirname,
      '../src/antd-icons.js'
    )
}
在使用 Vben Web-Ant Design(简称 Vben Web-antd)框架的项目中,通过 `pnpm` 导入 `unplugin-icons` 插件可以实现图标资源的自动解析和按需加载。以下是具体的步骤和配置方法。 ### 安装 unplugin-icons 首先,需要通过 `pnpm` 安装 `unplugin-icons` 及其依赖项: ```bash pnpm install unplugin-icons @iconify/json --save-dev ``` 其中 `@iconify/json` 是图标数据源,提供了量的图标资源供使用[^3]。 ### 配置 Vite Vben Web-antd 项目通常基于 Vite 构建工具,因此需要在 `vite.config.ts` 文件中进行配置,以启用 `unplugin-icons` 插件。 ```ts import Icons from 'unplugin-icons/vite' export default defineConfig({ plugins: [ Icons({ compiler: 'vue3', autoInstall: true, }), // 其他插件... ], }) ``` 上述配置中: - `compiler: 'vue3'` 表示当前项目使用的是 Vue 3 语法。 - `autoInstall: true` 表示自动安装图标所需的运行时依赖,无需手动安装额外包[^3]。 ### 使用图标 配置完成后,可以在 Vue 组件中通过 `i` 标签调用图标,格式为 `i-carbon-sun`,其中 `carbon` 是图标集名称,`sun` 是图标名称。 ```vue <template> <div> <i-carbon-sun /> </div> </template> ``` 如果需要动态绑定图标名称,可以使用 `v-bind` 或直接绑定变量: ```vue <template> <div> <i :class="iconName" /> </div> </template> <script setup> const iconName = 'carbon-sun' </script> ``` ### 图标集管理 `unplugin-icons` 支持多种图标集,例如 `carbon`、`mdi`、`heroicons` 等,可以通过访问 [Iconify](https://icon-sets.iconify.design/) 查看所有可用图标集。使用时只需按照 `i-{图标集}-{图标名}` 的格式即可调用[^3]。 ### 注意事项 1. **Vue 3 兼容性**:确保 `unplugin-icons` 配置中的 `compiler` 设置为 `'vue3'`,因为 Vben Web-antd 基于 Vue 3 构建。 2. **自动安装依赖**:若启用 `autoInstall: true`,插件会自动安装所需的图标运行时库,无需额外手动安装。 3. **类型声明**:如果项目中使用了 TypeScript,并且出现找不到模块的错误,可以在 `shims.d.ts` 文件中添加 Vue 文件的类型声明,以解决模块解析问题[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值