概述
本文主要是针对 vue 项目的 webpack 打包文件大小优化相关讲解。配套测试源码
详述
总的思路就是尽量减小打包文件大小,具体方法就是按需加载,也就是更小颗粒度的去引用需要的功能模块。
基础优化
一,组件库按需引入组件:
1 | // src/main.js |
二,路由中使用“webpackChunkName”:
1 | // src/router.js |
三,第三方库按需打包
如 lodash,可以直接引入具体方法,也可以通过 webpack 插件来按需打包:
import debounce from "lodash/debounce"
或者import { debounce } from "lodash"
+ babel-plugin-lodash lodash-webpack-plugin
分析打包报告并优化
导出报告
1 | npm run build -- --report |
示例图如下:
根据该分析报告,可以看出比较大的模块有@ant-design、moment 和 echarts。本次也将以此为例讲解。
@ant-design 优化
这部分最大的优化点就是 icons 部分,本次讲下社区提供的优化方案。
创建 src/icons.js
1 | // 列举你需要的图标 |
配置 vue.config.js
1 | configureWebpack: { |
该方案有个缺点就是你得列举所有用到的图标,包括组件内用到的,目前没发现其他更好的方案。
moment 优化
针对 locale 语言包部分,本次也以社区提供的优化方案为例讲下。
整体思路为两种,一种是先忽略整体语言包,然后业务层面引入特定的语言包文件;另一种是直接指定打包哪些语言文件。主要会用到 webpack 的两个内置插件 IgnorePlugin
和 ContextReplacementPlugin
。
一,IgnorePlugin 的使用
移除所有语言包
1 | // vue.config.js |
在需要的地方引入需要的语言包
1 | <!-- src/App.vue --> |
二,ContextReplacementPlugin 的使用
1 | const webpack = require("webpack"); |
这样在你需要的地方就不用单独引入语言包了
1 | <!-- src/App.vue --> |
echarts 优化
由整体引入 echarts 包改成按需引入。
1 | // 整体引入: |
1 | // 按需引入: |
经过以上三个模块的优化之后,报告图如下:
优化前后大小对比:
webpack 性能优化——DLL
https://www.cnblogs.com/ghost-xyx/p/6472578.html
参考
极客时间——Vue 开发实战