官网提供的按需引入方法为全量按需引入,在打包分离中,仍旧存在使用不到的图表被打包进去。

例如:组件A使用了折线图、柱状图,组件B只用到了折线图,但是打包组件B的时候,柱状图也就被打包进去。

本文提供一种动态按需引入的思路,使得只用到折线图的组件B,打包的时候只打包折线图,不会将组件A用到的柱状图也打包进去。

目录结构:

Index.ts 如下:

// 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。
import * as ECHARTS from "echarts/core";
import type { ComposeOption } from "echarts/core";
import CORE, { CORE_ECOption } from "./Core";
import { LineChart_ECOption } from "./LineChart";
import { BarChart_ECOption } from "./BarChart";
import { RadarChart_ECOption } from "./RadarChart"; // 通过 ComposeOption 来组合出一个只有必须组件和图表的 Option 类型
export type ECOption = ComposeOption<CORE_ECOption | LineChart_ECOption | BarChart_ECOption | RadarChart_ECOption>; class Echarts {
public echarts: any;
constructor(type: string[], callback: any) {
// 注册必须的组件
ECHARTS.use([...CORE]); const charts: any = []; type!.map((item: any) => {
const res: any = import(/* webpackChunkName: "echarts" */ `./${item}`);
charts.push(res);
}); Promise.all(charts).then((res: any) => {
res.map((item: any) => {
ECHARTS.use(item.default);
});
callback(ECHARTS);
});
}
} export default Echarts;

Core.ts 如下:

// 引入标题,提示框,直角坐标系,数据集,内置数据转换器组件,组件后缀都为 Component
import {
TitleComponent,
TooltipComponent,
GridComponent,
DatasetComponent,
TransformComponent,
ToolboxComponent,
LegendComponent
} from "echarts/components"; // 标签自动布局、全局过渡动画等特性
import { LabelLayout, UniversalTransition } from "echarts/features"; // 组件类型的定义后缀都为 ComponentOption
import type {
TitleComponentOption,
TooltipComponentOption,
GridComponentOption,
DatasetComponentOption,
ToolboxComponentOption,
LegendComponentOption
} from "echarts/components"; // 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步
import { CanvasRenderer } from "echarts/renderers"; // 通过 ComposeOption 来组合出一个只有必须组件和图表的 Option 类型
export type CORE_ECOption =
| TitleComponentOption
| TooltipComponentOption
| GridComponentOption
| DatasetComponentOption
| ToolboxComponentOption
| LegendComponentOption; const CORE = [
TitleComponent,
TooltipComponent,
GridComponent,
DatasetComponent,
TransformComponent,
ToolboxComponent,
LegendComponent,
LabelLayout,
UniversalTransition,
CanvasRenderer
]; export default CORE;
 

BarChart.ts 如下:

import { BarChart } from "echarts/charts";

// 系列类型的定义后缀都为 SeriesOption
import type { BarSeriesOption } from "echarts/charts"; export type BarChart_ECOption = BarSeriesOption; export default BarChart;

LineChart.ts 如下:

import { LineChart } from "echarts/charts";

// 系列类型的定义后缀都为 SeriesOption
import type { LineSeriesOption } from "echarts/charts"; // 通过 ComposeOption 来组合出一个只有必须组件和图表的 Option 类型
export type LineChart_ECOption = LineSeriesOption; export default LineChart;
 

RadarChart.ts 如下:

import { RadarChart } from "echarts/charts";

// 系列类型的定义后缀都为 SeriesOption
import type { RadarSeriesOption } from "echarts/charts"; // 组件类型的定义后缀都为 ComponentOption
import type { RadarComponentOption } from "echarts/components"; // 通过 ComposeOption 来组合出一个只有必须组件和图表的 Option 类型
export type RadarChart_ECOption = RadarComponentOption | RadarSeriesOption; export default RadarChart;
 

如果项目中还用到其他图表类型,则按照具体需要引入即可。

可以根据具体业务进行调用封装,下面是封装的示例 util.ts:

import Echarts from "/echarts/Index";

export const renderEcharts = async (type: string[], dom: string, option: any = {}, callback?: any) => {
if (!dom) return; new Echarts(type, (echart: any) => {
const _dom: any = document.querySelector(dom); const echarts_instance = echart.init(_dom); echarts_instance.setOption(option); window.addEventListener("resize", function () {
echarts_instance.resize();
echarts_instance.clear();
echarts_instance.setOption(option);
}); _dom?.addEventListener("touchend", () => {
setTimeout(() => {
echarts_instance.dispatchAction({
type: "hideTip"
});
echarts_instance.dispatchAction({
type: "updateAxisPointer"
});
}, 1000);
}); callback && callback(echarts_instance);
});
};

具体调用:

let echarts_instance = null;
const options = {// 具体的option }
renderEcharts(["LineChart", "BarChart"], "#short_sale_count",options, (instance) => {
echarts_instance = instance;
});

Echarts 5 动态按需引入图表的更多相关文章

  1. vue项目使用echarts按需引入实现地图动态显示效果时,报错:TypeError: Cannot read property 'dataToPoint' of undefined

    vue项目使用echarts按需引入实现地图动态显示效果时,报错:TypeError: Cannot read property 'dataToPoint' of undefined 借鉴了该大神的文 ...

  2. 使用Echarts实现动态曲线图表

    最近做的一个在线气象观测网站要实现一个需求:使用图表展示最近五天温湿度等气象要素的曲线变化 具体效果参考:http://www.weatherobserve.com/showInfoIndex.jsp ...

  3. vue引入echarts、找不到的图表引入方法、图表中的点击事件

    1.在vue-cli项目中添加webpack配置,本文引入的最新版本.在 3.1.1 版本之前 ECharts 在 npm 上的 package 是非官方维护的,从 3.1.1 开始由官方 EFE 维 ...

  4. vue按需引入/全局引入echarts

    npm install echarts -S 1.按需引入 新建echarts.js公共引入 // 文件路径 @/lib/echarts.js 自行配置 // 加载echarts,注意引入文件的路径 ...

  5. vue按需引入echarts

    下载安装echarts包:npm install echarts -D 一.全局引入 main.js中配置 import echarts from 'echarts' //引入echarts Vue. ...

  6. mpvue中按需引入echarts

    大家都知道小程序文件大小不能超过2M, 在项目中引入echarts后,文件大小远远超出2M了.因为echarts文件默认是包含所有图表代码的,所以文件体积会比较大.解决办法如下: 安装 首先我们先安装 ...

  7. ECharts(Enterprise Charts 商业产品图表库)初识

    一.简介 大数据时代,重新定义图表的时候到了,所以随之ECharts就随之出现了. ECharts(Enterprise Charts 商业产品图表库) 是基于Canvas的,纯Javascript ...

  8. ECharts学习(1)--简单图表的绘制

    1.获取ECharts 官网 下载:http://echarts.baidu.com/download.html 2.在html页面中引入ECharts文件 <!DOCTYPE html> ...

  9. ECharts一个强大的商业产品图表库

    Architecture ECharts (Enterprise Charts 商业产品图表库) 提供商业产品常用图表库,底层基于ZRender,创建了坐标系,图例,提示,工具箱等基础组件,并在此上构 ...

  10. import 和组件库按需引入

    概述 今天查资料查到了一些有趣的东西,记录下来,供以后开发时参考,相信对其他人也有用. 参考资料: import.require.export.module.exports 混合使用详解 从 impo ...

随机推荐

  1. Git配置环境变量

    由于学习需要装了git,使用终端查看版本号时 提示 'git' 不是内部或外部命令,也不是可运行的程序 或批处理文件. 原因 因为没有配置Git环境变量 解决方法:配置环境变量 开始菜单=>设置 ...

  2. Windows下用VS2022编译安装Boost库

    Windows下用VS2022编译安装Boost库 下载地址: https://www.boost.org/users/download/ 解压得到如下文件: 编译安装: 打开vs2022命令行工具 ...

  3. uboot 修改代码 增加 环境变量

    --- title: uboot修改代码增加环境变量 date: 2019-12-27 21:26:39 categories: tags: - uboot --- 以"tftp下载kern ...

  4. Nginx性能调优5招35式不可不知的策略实战

    Nginx是一个高性能的HTTP和反向代理服务器,它在全球范围内被广泛使用,因其高性能.稳定性.丰富的功能以及低资源消耗而受到青睐.今天V哥从5个方面来介绍 Nginx 性能调优的具体策略,希望对兄弟 ...

  5. springboot 整合 pagehelper

    pom.xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pa ...

  6. yb课堂 VSCODE编译器和开发环境搭建 《二十五》

    前端编辑器 vscode:免费开源的现代化轻量级代码编辑器,支持大部分主流的开发语言的语法高亮.智能代码补全.自定义热键.代码对比DIFF.GIT等特性,支持插件扩展,软件跨平台支持Win.Mac以及 ...

  7. 记录 中**信 ruoyi项目 部署全流程

    零 本地环境改为线上环境 包括 1 后端的数据库连接地址 2 后端的文件存储本地地址 3 后端的文件存储ip地址 4 前端baseUrl 一 后端项目打包 双击package 二 mstsc 进入服务 ...

  8. 【实操记录】MySQL主从配置

    本文使用MySQL原生支持的主从同步机制,详细记录了配置步骤及运维操作方法,可供大家直接参考.使用. 本文假设已经部署了两台主机的MySQL软件,且数据库服务正常,详细部署步骤可本站搜索:" ...

  9. Django 自带忘记密码,密码重置功能

    registration/password_reset_form.html: 重置密码表单模板 registration/password_reset_email.html: 发送重置密码邮件模板 r ...

  10. Linux安装 JDK (CentOS 7)

    Linux安装 JDK 一.Linux安装软件的方式 第一种:二进制发布包安装: 软件已经针对具体平台编译打包发布,只要解压,修改配置即可 第二种: rpm安装 : 软件已经按照redhat的包管理规 ...