【Vue 开发实战】实战篇 # 44:如何高效地构建打包发布

简介: 【Vue 开发实战】实战篇 # 44:如何高效地构建打包发布

说明

【Vue 开发实战】学习笔记。



生成分析报告

我们可以使用下面命令生成

npm run build -- --report


执行完成之后就会在打包目录生成一个report.html文件

2e2ca4c6f4a14b02ad2ffac1ffa44dce.png

分析报告文件

打开这个html http://127.0.0.1:5500/ant-design-vue-pro/dist/report.html 页面如下


3674d6ff591d4aaa9f1fa2c6cb9a5e8a.png



我们可以看到比较大的部分有三个:

  1. @ant-design 的图标
  2. moment
  3. echarts

现在这些模块有 2.47MB

d7510829c7124570b8584d515a3d1f75.png


下面就着手优化上面的三个问题。



优化1:图标太大问题

具体可以查看这个issue:bunlde size too large #325

f89edbbc95e042b2a4745bd024069344.png


选择第二个:https://github.com/HeskeyBaozi/reduce-antd-icons-bundle-demo

我们新建 src/icons.js 将需要的图标添加到这个里面

export {
    default as SettingOutline
} from '@ant-design/icons/lib/outline/SettingOutline';
export {
    default as GlobalOutline
} from '@ant-design/icons/lib/outline/GlobalOutline';
export {
    default as CloseOutline
} from '@ant-design/icons/lib/outline/CloseOutline';


vue.config.js 配置

module.exports = {
  configureWebpack: {
    resolve: {
      alias: {
        "@ant-design/icons/lib/dist$": path.resolve(__dirname, "./src/icons.js")
      }
    }
  }
};


这种方案需要细心的配置所需图标



优化2:moment 太大

我们看第三点

0b47c35906e14557b6014044078447b1.png



https://github.com/jmblog/how-to-optimize-momentjs-with-webpack

使用 IgnorePlugin 删除所有语言环境文件。

const webpack = require('webpack');
module.exports = {
  configureWebpack: {
    plugins: [ themePlugin, new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/) ],
    resolve: {
        alias: {
            "@ant-design/icons/lib/dist$": path.resolve(__dirname, "./src/icons.js")
        }
    }
  },
};

可以在代码中加载一些语言环境。

// 对日期进行处理
import moment from "moment";
import "moment/locale/zh-cn";
import "moment/locale/en-gb";
export default {
    data() {
        return {
            locale: zhCN
        }
    },
    watch: {
        "$route.query.locale": function(val) {
            this.locale = val === "zhCN" ? zhCN : enUS;
            moment.locale(val === "zhCN" ? "zh-cn" : "en-gb");
            console.log(moment)
        }
    }
}



优化3:echarts 按需加载

这里只使用了柱状图相关的,我这里是 echarts5 的版本

// 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。
import * as echarts from "echarts/core";
// 引入条形图表,图表后缀都为 Chart
import { BarChart } from "echarts/charts";
// 引入提示框,标题,直角坐标系等组件,组件后缀都为 Component
import {
  TitleComponent, // 标题
  TooltipComponent, // 类似于hover的提示
  GridComponent,   // 网格
  LegendComponent, // 指示说明
} from "echarts/components";
// 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer
import { CanvasRenderer } from "echarts/renderers";
// 注册必须的组件
echarts.use([
    BarChart,
    TitleComponent,
    TooltipComponent,
    GridComponent,
    LegendComponent,
    CanvasRenderer
]);


优化后的效果

我们可以看到,小了不少

64c1d34018a040dea0262eaecb9f0bca.png

变成 1.23MB

168c2539962c495b8d23687d9728e912.png





目录
相关文章
|
22小时前
|
JavaScript 前端开发 测试技术
使用 Vue CLI 脚手架生成 Vue 项目
通过 Vue CLI 创建 Vue 项目可以极大地提高开发效率。它不仅提供了一整套标准化的项目结构,还集成了常用的开发工具和配置,使得开发者可以专注于业务逻辑的实现,而不需要花费大量时间在项目配置上。
53 7
使用 Vue CLI 脚手架生成 Vue 项目
|
2天前
|
JavaScript 算法
“Error: error:0308010C:digital envelope routines::unsupported”启动vue项目遇到一个错误【已解决
“Error: error:0308010C:digital envelope routines::unsupported”启动vue项目遇到一个错误【已解决
8 1
|
2天前
|
JavaScript
error Component name “Login“ should always be multi-word vue/multi-word-component-names【已解决】
error Component name “Login“ should always be multi-word vue/multi-word-component-names【已解决】
6 1
|
2天前
|
JavaScript
vue知识点
vue知识点
10 3
|
JavaScript 测试技术 容器
Vue2+VueRouter2+webpack 构建项目
1). 安装Node环境和npm包管理工具 检测版本 node -v npm -v 图1.png 2). 安装vue-cli(vue脚手架) npm install -g vue-cli --registry=https://registry.
1002 0
|
10天前
|
JavaScript 前端开发 开发者
vue3+ts配置跨域报错问题解决:> newpro2@0.1.0 serve > vue-cli-service serve ERROR Invalid options in vue.
【6月更文挑战第3天】在 Vue CLI 项目中遇到 "ERROR Invalid options in vue.config.js: ‘server’ is not allowed" 错误是因为尝试在 `vue.config.js` 中使用不被支持的 `server` 选项。正确配置开发服务器(如代理)应使用 `devServer` 对象,例如设置代理到 `http://xxx.com/`: ```javascript module.exports = { devServer: {
24 1
|
3天前
|
JavaScript 前端开发 Java
【vue实战项目】通用管理系统:作业列表
【vue实战项目】通用管理系统:作业列表
16 0
|
3天前
|
JavaScript API
【vue实战项目】通用管理系统:信息列表,信息的编辑和删除
【vue实战项目】通用管理系统:信息列表,信息的编辑和删除
21 2
|
4天前
|
JavaScript API
【vue实战项目】通用管理系统:信息列表,信息录入
【vue实战项目】通用管理系统:信息列表,信息录入
11 3
|
4天前
|
JavaScript 前端开发 API
【vue实战项目】通用管理系统:学生列表
【vue实战项目】通用管理系统:学生列表
16 2