因为项目有样式规范要求,和规范最相似的就是antd了,再加上项目用的是2.x,所以使用antd 1.x版本进行开发。项目完成后,理所应当对打包进行优化,于是遇到了icons组件全量引入的问题,查找了资料实现后特地记录一下(别问为什么不用vue3,因为项目太赶,就挑了最顺手的vue2.x)
antd vue按需引入已经不用再多说了,按照官网一步步的实现基本不会出现问题。问题主要是出现在icons组件上。
首先,通过webpack-bundle-analyzer
插件对打包产物进行分析,可以看到@antd-vue/icons
的占比非常的大,经过gzip
压缩后都有差不多150kb
的大小。再看看ant-design-vue
中的引入
可以看到源码里是全量引入的。
@ant-design/icons
从全量改完按需引入首先得把它的依赖装上,至于装的什么版本,可以从node_modules
中ant-design-vue
的package.json
查看当前依赖的版本。我这里用的是1.7.8的版本
,对应的icons版本是2.1.1
这一步是将需要按需引入的图标进行统一管理并导出使用。例如:
export { default as LeftOutline } from '@ant-design/icons/lib/outline/LeftOutline';
找到configureWebpack
配置,并添加resolve.alias
配置,如下:
// 对象
configureWebpack: {
resolve: {
alias: '@ant-design/icons/lib/dist$': '${path}',
}
}
// 函数
configureWebpack: config => {
config.resolve.alias: {
alias: '@ant-design/icons/lib/dist$': '${path}',
}
}
${path}
:第二步时自定义的图标js文件路径(例如:path.join(__dirname, ‘xxx/xxx/xxx.js’))
这一步是网上所有方法中通用的,作用是将图标引用路径指向为自己定义的地方,这样webpack之后打包就只会打包我们在自定义js中定义导出的图标。
@ant-design/icons
版本要和当前使用的@ant-design-vue
对得上。如果不知道对应版本可以按照我上面提到的方法查看Can't resolve '@ant-design/icons/lib/outline/xxx' in xxxx
,先看node_modules
中这路径存不存在,再看下载的版本对不对,一般检查这2个足以排查出问题一定一定
记得用到的图标或者疑似用到的图标都要引入,比如Loading
。不知道引入图标的名称可以去node_modules
中查看对应的js