node.js 利用JSZIP 压缩文件、文件夹,以及解压压缩文件中的文件

一、使用JSZIP包来 打包文件或者文件夹

1. node.js安装 jszip(已安装跳过)

npm install jszip

2.编写 jszip打包代码

 1 let fs = require("fs");//获取文件系统模块,负责读写文件
 2 let path = require("path");//工具模块,处理文件路径的小工具
 3 let JSZIP = require("jszip");
 4 let zip = new JSZIP();
 5 
 6 //读取目录及文件
 7 function readDir(obj, nowPath) {
 8     let files = fs.readdirSync(nowPath);//读取目录中的所有文件及文件夹(同步操作)
 9     files.forEach(function (fileName, index) {//遍历检测目录中的文件
10         console.log(fileName, index);//打印当前读取的文件名
11         let fillPath = nowPath + "/" + fileName;
12         let file = fs.statSync(fillPath);//获取一个文件的属性
13         if (file.isDirectory()) {//如果是目录的话,继续查询
14             let dirlist = zip.folder(fileName);//压缩对象中生成该目录
15             readDir(dirlist, fillPath);//重新检索目录文件
16         } else {
17             obj.file(fileName, fs.readFileSync(fillPath));//压缩目录添加文件
18         }
19     });
20 }
21 
22 //开始压缩文件
23 function startZIP() {
24     var currPath = __dirname;//文件的绝对路径 当前当前js所在的绝对路径
25     var targetDir = path.join(currPath, "JsonMerge");
26     readDir(zip, targetDir);
27     zip.generateAsync({//设置压缩格式,开始打包
28         type: "nodebuffer",//nodejs用
29         compression: "DEFLATE",//压缩算法
30         compressionOptions: {//压缩级别
31             level: 9
32         }
33     }).then(function (content) {
34         fs.writeFileSync(currPath + "/result.zip", content, "utf-8");//将打包的内容写入 当前目录下的 result.zip中
35     });
36 }
37 
38 startZIP();

3. H5游戏客户端白鹭引擎利用jszip 解压配置文件 

RES.getResByUrl(configURL, function (data) {
    let txt = new JSZIP(data).file("a.json").asText();
    let jsonObj = JSON.parse(txt);//转化为json对象
    //将配置信息存储便于运用
}, this, RES.ResourceItem.TYPE_BIN);

要使用jszip, 首先下载jszip第三方库,下载地址,Egret官方在github上放的:https://github.com/egret-labs/egret-game-library 

将jszip放在项目目录下,放在哪你自选,只要配置中添加路径时正确就行了(下图中放在了 lib目录下)。

然后在Egret中引用第三方库,项目目录下egretProperties.json文件中添加

{
  "engineVersion": "5.2.12",
  "compilerVersion": "5.2.12",
  "template": {},
  "target": {
    "current": "web"
  },
  "urlParams": {},
  "modules": [
    {
      "name": "egret"
    },
    {
      "name": "assetsmanager"
    },
    {
      "name": "tween"
    },
    {
      "name": "game"
    },
    {
      "name": "socket"
    },
    {
      "name": "promise"
    },
    {
      "name": "dragonBones"
    },
    {
      "name": "jszip",
      "path": "./libs/jszip"
    }
  ]
}

 

posted @ 2019-02-22 18:55  猪猪快冲  阅读(10285)  评论(0编辑  收藏  举报