微信小程序分包教程微信小程序主包和分包的区别

9158APP 0

1. 需求详解

很多时候,我们在项目中使用了大量的可视化图表数据。在很多工作中,我们最熟悉的可视化数据一定是工具echarts。它非常容易使用并且免费。听起来很好吃,是的!确实是很有用的香。

但是当我们在特定的场景,比如小程序时,就很头疼了。为什么?小程序中,代码上传大小只有2M,小程序本地必须使用echarts,无法使用连接。方法是外部参考(微信官方规定项目有请求白名单)。

那么在项目中使用echarts会占用很多我们有限的空间,那么我们该怎么办呢?这里我会告诉大家如何在小程序项目中使用可视化工具。

2. 使用echarts

首先去官方网站。相比有小程序开发经验的开发者来说,步骤相对简单。一般步骤:

1.下载官网示例。

2、将官网示例中的ec-canvas文件夹复制到项目目录下。

3、像使用组件一样,将ec-canvas引入到具体页面中。

4、在具体页面的js中初始化。

下载官网示例后,找到ec-canvas文件夹,其中包含echarts.js、wx-canvas.js和ec-canvas四件套。

然后将此文件夹复制到自己项目的目录下,放到utils下。后来分包之后,就会放到别的地方。在这里,它将被放置在utils 下。然后该项目变得更大了700+KiB。

页面中的使用 xxx.json文件中

{

"usingComponents"{ "ec-canvas""xxx/xxx/xxx/ec-canvas/ec-canvas" }

}

xxx.wxml 中使用组件来实例

查看类=”container-echarts margin-top-10

ec-canvas class=”mycharts” id=”mychart-dom-bar” canvas-id=”mychart-bar” ec=”{{ ec }}”/ec-canvas

/看法

js文件中

首先需要引入echarts,然后就可以使用下面的initChart方法,所以根据放置的ec-canvas的路径引入echarts。

从‘ 导入* 作为echarts

xxx/xxx/xxx/ec-canvas/echarts’; //根据放置ec-canvas的路径引入echarts

let Chart=null //使用变量来保存echarts的初始化

let options={ //图形配置,用过echarts的都知道什么意思~这里是官网折线图的基本例子

x轴:{

类型:‘类别’,

数据:[‘周一’、‘周二’、‘周三’、‘周四’、‘周五’、‘周六’、‘周日’]

},

y 轴:{

类型:‘值’

},

系列: [{

数据:[150, 230, 224, 218, 135, 147, 260],

类型:'线'

}]

}

function initChart(canvas, width, height, dpr) { //这里的canvas, width, height, dpr可以忽略

const 图表=echarts.init(canvas, null, {

宽度:宽度,

高度: 高度,

devicePixelRatiodpr //像素

});

canvas.setChart(图表);

图表.setOption(选项);

返回图表;

}

页({

数据: {

欧共体:{

onInitinitChart //这里不要添加括号!

}

}

});

保存并运行。至此,理论上echarts就可以显示了。实际使用中,还是要自己调试。

使用图表变量来保存echarts的初始化。官网的方法里也写了选项,所以我就拿出来了。

那么图表有什么用呢?因为大部分数据都是异步获取的,所以echarts必须动态渲染。拿到数据后,就用这个图表。

图表.setOption({

x轴:{

数据:newData.map(item={

返回项目[0];

})

},

系列: {

数据:newData.map(item={

返回项目[1];

})

}

})

我们定义的data数据

数据: {

isUseNewCanvastrue //这里改为true,默认为false

}

在组件中使用数据 2种方式

! 新:界面与H5 一致

画布wx:if=“{{isUseNewCanvas}}”type=“2d”class=“ec-canvas”canvas-id=“{{canvasId}}”bindinit=“init”bindtouchstart=“{{ec.disableTouch? ” 'touchStart' }}” bindtouchmove=”{{ ec.disableTouch ? ” ‘touchMove’ }}” bindtouchend=”{{ ec.disableTouch ? ” ‘touchEnd’ }}”/canvas

!- 老的-

canvas wx:else class=“ec-canvas”canvas-id=“{{canvasId }}”bindinit=“init”bindtouchstart=“{{ec.disableTouch? ” ‘touchStart’ }}” bindtouchmove=”{{ ec .disableTouch ? ” 'touchMove' }}” bindtouchend=”{{ ec.disableTouch ? ” ‘touchEnd’ }}”/canvas

3. 分包加载

好了,以上就是我们使用echarts的步骤了,但是echarts文件大小为500KB+,严重影响了我们项目的打包大小,所以这里必须使用分包。

app.json里面有一个子包

{

“子包”:[

{

“根”:“xxx/xxx”,

“姓名”:“xxx”,

“独立”:假,

“页面”:[

“页数/xxx”,

“页数/xxx”,

“页数/xxx”

]

},

{

"root""baoziTask/",

"name""包子",

“页面”:[

“页面/肉包子/肉包子”

]

}

],

}

这个分包在官网上说的挺简单的,但是我使用的时候是这么理解的。

root是要分包的路径,放在根目录下。那么baoziTask下的所有文件都会被认为是一个包。不在baoziTask路径下的文件会被打包到app的主包中。

name是子包的别名,预下载时会用到。这种预下载是当你在某个页面时,想要主动下载这个可能用于提高访问速度的子包。

例如,当我进入某个页面时,我很可能会点击某个地方来跳转到某个子包。这时候我可以预先下载子包,而不是只有跳转的时候才下载子包。

独立是指分包是否独立,但我没有使用过,没有直观的感觉。据说可以独立运行,不依赖app主包。这个需要配置,不是下载代码,配置preloadRule。具体的还得去官网查看并亲自尝试一下。