首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >echarts2 的引入方式

echarts2 的引入方式

作者头像
johnhuster的分享
发布2022-03-28 14:31:06
发布2022-03-28 14:31:06
1.3K0
举报
文章被收录于专栏:johnhusterjohnhuster

echarts是一款不错的商业级数据图表,目前已更新到echarts3版本,但是由于历史原因,echarts2仍然有比较大的使用占比,之所以讲echarts2的引入方式是因为项目在混合使用echarts2与echarts3的时候遇到了一个问题,这个与我之前写过的一篇文章有关:http://blog.csdn.net/john1337/article/details/54947787,下面入主题。

echarts2有三种引入方式:

1.模块化包引入

如果你熟悉模块化开发,你的项目本身就是模块化且遵循AMD规范的,那引入echarts将很简单,使用一个符合AMD规范的模块加载器,如esl.js,只需要配置好packages路径指向src即可,你将享受到图表的按需加载等最大的灵活性,由于echarts依赖底层zrender,你需要同时下载zrender到本地,可参考demo,你需要配置如下。 需要注意的是,包引入提供了开发阶段最大的灵活性,但并不适合直接上线,减少请求的文件数量是前端性能优化中最基本但很重要的规则,务必在上线时做文件的连接压缩。

代码语言:javascript
复制
 //from echarts example
 require.config({
     packages: [
         {
             name: 'echarts',
             location: '../../src',
             main: 'echarts'
         },
         {
             name: 'zrender',
             location: '../../../zrender/src', // zrender与echarts在同一级目录
             main: 'zrender'
         }
     ]
 });
 

2.模块化单文件引入(推荐)

如果你使用模块化开发但并没有自己的打包合并环境,或者说你不希望在你的项目里引入第三方库的源文件,我们建议你使用单文件引入,同模块化包引入一样,你需要熟悉模块化开发。

自2.1.8起,echarts团队为echarts开发了专门的合并压缩工具echarts-optimizer。如你所发现的,build文件夹下已经包含了由echarts-optimizer生成的单文件: dist(文件夹) : 经过合并、压缩的单文件 echarts.js : 这是包含AMD加载器的echarts主文件,需要通过script最先引入 chart(文件夹) : echarts-optimizer通过依赖关系分析同时去除与echarts.js的重复模块后为echarts的每一个图表类型单独打包生成一个独立文件,根据应用需求可实现图表类型按需加载 line.js : 折线图(如需折柱动态类型切换,require时还需要echarts/chart/bar) bar.js : 柱形图(如需折柱动态类型切换,require时还需要echarts/chart/line) scatter.js : 散点图 k.js : K线图 pie.js : 饼图(如需饼漏斗图动态类型切换,require时还需要echarts/chart/funnel) radar.js : 雷达图 map.js : 地图 force.js : 力导向布局图(如需力导和弦动态类型切换,require时还需要echarts/chart/chord) chord.js : 和弦图(如需力导和弦动态类型切换,require时还需要echarts/chart/force) funnel.js : 漏斗图(如需饼漏斗图动态类型切换,require时还需要echarts/chart/pie) gauge.js : 仪表盘 eventRiver.js : 事件河流图 treemap.js : 矩阵树图 venn.js : 韦恩图 source(文件夹) : 经过合并,但并没有压缩的单文件,内容同dist,可用于调试 采用单一文件使用例子见ECharts单一文件引入,存放在example/www下,首先你需要通过script标签引入echarts主文件

代码语言:javascript
复制
 //from echarts example
 <body>
     <div id="main" style="height:400px;"></div>
     ...
     <script src="./js/echarts.js"></script>
 </body>

在主文件引入后你将获得一个AMD环境,配置require.conifg如下:

代码语言:javascript
复制
//from echarts example
 <body>
     <div id="main" style="height:400px;"></div>
     ...
     <script src="./js/echarts.js"></script>
     <script type="text/javascript">
         require.config({
             paths: {
                 echarts: './js/dist'
             }
         });
     </script>
 </body>
 require.config配置后就可以通过动态加载使用echarts
 
 
 //from echarts example
 <body>
     <div id="main" style="height:400px;"></div>
     ...
     <script src="./js/echarts.js"></script>
     <script type="text/javascript">
         require.config({
             paths: {
                 echarts: './js/dist'
             }
         });
         require(
             [
                 'echarts',
                 'echarts/chart/line',   // 按需加载所需图表,如需动态类型切换功能,别忘了同时加载相应图表
                 'echarts/chart/bar'
             ],
             function (ec) {
                 var myChart = ec.init(document.getElementById('main'));
                 var option = {
                     ...
                 }
                 myChart.setOption(option);
             }
         );
     </script>
 </body>

总结来说,模块化单文件引入ECharts,你需要如下4步: 为ECharts准备一个具备大小(宽高)的Dom(当然可以是动态生成的) 通过script标签引入echarts主文件 为模块加载器配置echarts的路径,从当前页面链接到echarts.js所在目录,见上述说明 动态加载echarts及所需图表然后在回调函数中开始使用(容我罗嗦一句,当你确保同一页面已经加载过echarts,再使用时直接require('echarts').init(dom)就行)

3.标签式单文件引入

自1.3.5开始,ECharts提供标签式引入。如果你的项目本身并不是基于模块化开发的,或者是基于CMD规范(如使用的是seajs),那么引入基于AMD模块化的echarts可能并不方便,我们建议你采用srcipt标签式引入,忘掉require。Srcipt标签引入echarts后将可以直接使用两个全局的命名空间:echarts,zrender,可参考ECharts标签式引入,需要注意的是excanvas依赖body标签插入Canvas节点去判断Canvas的支持,如果你把引用echarts的script标签放置head内在IE8-的浏览器中会出现报错,解决的办法就是把标签移动到body内(后)。 标签式引入环境中,常用模块的引用可通过命名空间直取,同模块化下的路径结构,如:

代码语言:javascript
复制

 echarts.config = require('echarts/config'), zrender.tool.color = require('zrender/tool/color')
 
 //from echarts example
 <body>
     <div id="main" style="height:400px;"></div>
     ...
     <script src="example/www2/js/dist/echarts-all.js"></script>
     <script>
         var myChart = echarts.init(document.getElementById('main'));
         var option = {
             ...
         }
         myChart.setOption(option);
     </script>
 </body>

可以直接引入的单文件如下: dist/echarts-all.js : 经过压缩,全图表,包含world,china以及34个省市级地图数据 source/echarts-all.js : 未压缩,全图表,包含world,china以及34个省市级地图数据,可用于调试

echarts3已经摒弃了方法2这种这种方式,下面就说说方法2这种方式的不好的地方,方法2的缺点就在于暴露出了“var define,require,esl;”这三个全局变量,但是现在有不少插件包括jquery都已经引入了umd规范:

代码语言:javascript
复制
   (function (root, factory) {
        if (typeof define === "function" && define.amd) {
            // AMD
            define(["jquery", "underscore"], factory);
        } else if (typeof exports === "object") {
            // Node, CommonJS之类的
            module.exports = factory(require("jquery"), require("underscore"));
        } else {
            // 浏览器全局变量(root 即 window)
            root.returnExports = factory(root.jQuery, root._);
        }
    }(this, function ($, _) {
        //    方法
        function a(){};    //    私有方法,因为它没被返回 (见下面)
        function b(){};    //    公共方法,因为被返回了
        function c(){};    //    公共方法,因为被返回了

        //    暴露公共方法
        return {
            b: b,
            c: c
        }
    }));

这样凡是在echarts2.js文件后引入的复合amd框架的代码将不能正常工作,所以虽然官网推荐这种方式,个人更喜欢推荐第三种方式。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/02/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档