ywwhack / babel-plugin-equire

a babel plugin for dynamic load echarts module
23 stars 0 forks source link

Build Status

按需加载 echarts 模块

当我们只需要 echarts 的 line 和 tooltip 模块的时候,我们会这么写:

import echarts from 'echarts/lib/echarts'
import 'echarts/lib/chart/line'
import 'echarts/lib/component/tooltip'

当引入了这个插件后,我们只需要这个写:

// eslint-disable-next-line
const echarts = equire([
  'line',
  'tooltip'
])

这个插件会自动帮我们转化为上面的形式

安装

npm i babel-plugin-equire -D

然后,在 .babelrc 文件中添加该插件

{
  "plugins": [
     // other plugins
     ...

    "equire"
  ]
}

用法

新建一个文件 initEcharts.js 用于初始化 echarts 模块,然后编写如下代码:

@/src/utils/initEcharts.js

// eslint-disable-next-line
const echarts = equire([
  'line',
  'tooltip'
])

export default echarts

在需要用到 echarts 的地方引入上面的 initEcharts.js 文件

import echarts from '@/src/utils/initEcharts'

这样,最后打包出来的文件就只有包含 echarts 的核心模块和 line/bar 两个图表模块

配合 code-splitting

将上面文件的 equire 替换为 equireAsync,这个时候 equireAsync() 返回的是一个函数,函数执行后会返回一个 promise 对象

// eslint-disable-next-line
const initEcharts = equireAsync([
  'line',
  'tooltip'
])

export default initEcharts

在其他文件中使用:

import initEcharts from '@/src/utils/initEcharts'

initEcharts()
  .then(echarts => {
    // do somthing with echarts
  })

完整用例可以参考 同步加载 异步加载

API

引入这个插件后,在 babel 编译时会注入两个全局函数:equireequireAsync

equire(modules)

equireAsync(modules)

转化规则

下面列出了所有 chartcomponent 的模块,插件内部会根据这些模块名称转成相应的路径,你也可以直接指定路径来引入模块,如 zrender/lib/vml/vml,这个时候会直接使用该路径来引入模块

// @chart

  'bar',
  'boxplot',
  'candlestick',
  'chord',
  'custom',
  'effectScatter',
  'funnel',
  'gauge',
  'graph',
  'heatmap',
  'line',
  'lines',
  'map',
  'parallel',
  'pictorialBar',
  'pie',
  'radar',
  'sankey',
  'scatter',
  'themeRiver',
  'treemap'

// @component

  'angleAxis',
  'axis',
  'axisPointer',
  'brush',
  'calendar',
  'dataZoom',
  'dataZoomInside',
  'dataZoomSelect',
  'geo',
  'graphic',
  'grid',
  'gridSimple',
  'legend',
  'markArea',
  'markLine',
  'markPoint',
  'parallel',
  'parallelAxis',
  'polar',
  'radar',
  'radiusAxis',
  'single',
  'singleAxis',
  'timeline',
  'title',
  'toolbox',
  'tooltip',
  'visualMap',
  'visualMapContinuous',
  'visualMapPiecewise'