前言
在 Egret 项目中,发布的时候可以使用 压缩插件将资源(图片,配置文件等)压缩成一个 .zip 文件,然后使用JSZip读取 .zip 文件的内容。
测试环境
Egret v5.2.10
JSZip https://github.com/egret-labs/egret-game-library
npm install cross-zip https://www.npmjs.com/package/cross-zip
Cross-zip安装/ZipPlugin设置压缩规则
使用ZipPlugin把文件压缩成zip格式
为了减少加载次数和传输量,我们可以把文件压缩成zip格式,使用的时候可以使用第三方库JSZip来读取使用zip文件。
使用ZipPlugin插件之前,需要安装cross-zip 和 cross-zip-cli , 在终端中输入:
1 | //全局安装 |
如果没有安装 会报错:Property 'Unzip' does not exist on type 'typeof Zlib'
1 | Error D:/XXX.ts (973,23): Property 'Unzip' does not exist on type 'typeof Zlib'. |
安装完成之后,在config.wxgame.ts添加代码:
1 | new ZipPlugin({ |
参考的这里:使用Egret插件压缩代码包体积,减少请求数量的实战教程
按照Egret-第三方库的使用方法导入JSZip后发布微信小程序遇到以下问题:
错误1 t.createElementNS is not a function
修改:webapp-adapter.js,增加一个方法(我用这个没生效)
1 | createElementNS: function createElementNS(nameSpace, tagName) { |
看日志可以得知,createElementNS 不被支持,那么我们可以将所有 createElementNS 改为 createElement。
1 | document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); |
错误2 ReferenceError: JSZip is not defined
这个是微信里面不认window[xxx]的原因
修改jszip.js开头部分为
1 | !function (a) { if ("object" == typeof exports && "undefined" != typeof module){ |
错误3 VM9492:1 Error: The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.
1 | VM9492:1 Error: The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide. |
解决办法:
Upgrade Guide From 2.x to 3.0.0
https://stuk.github.io/jszip/documentation/upgrade_guide.html
使用3.0版本的语法:
Egret-JSZip库说明-http://developer.egret.com/cn/github/egret-docs/extension/jszip/jszip/index.html
读取zip文件
首先将 .zip 文件配置到default.res.json中,便于后面读取使用。
1 | // 使用res获取到zip文件 |
加载json
1 | RES.getResAsync('json_zip').then((data) => { |
加载图片
1 | RES.getResAsync('img_zip').then((data) => { |
生成zip文件
1 | var zip = new JSZip(); |
*** 本文章转载:Egret插件】JSZip-ZipPlugin踩坑记