GitHub上一些实用的JavaScript的文件压缩解压缩库推荐
本文对比了JavaScript中常用的文件压缩与解压缩库,包括adm-zip、JSZip以及archiver与unzip组合。分析了各库在处理现有文件夹时的优缺点,如adm-zip操作简便但存在bug,JSZip适合动态数据但处理现有文件夹繁琐,archiver组合稳定且易用。
JavaScript文件压缩库概述
在项目中需要归档和解归档整个已存在的文件夹时,我尝试了几种当前较为流行的JavaScript库,主要包括adm-zip、JSZip和archiver等。
adm-zip库的使用与优缺点
一、使用adm-zip adm-zzip支持对一个或多个文件或整个文件夹进行归档和解归档操作,其使用过程简单且便捷。
var adm_zip = require('adm-zip');
//creating archives
var zip = new adm_zip();
zip.addLocalFolder('archiver');
zip.writeZip('adm/adm-archive.zip');
//extracting archives
var unzip = new adm_zip('adm/adm-archive.zip');
unzip.extractAllTo("adm/adm-unarchive/", /*overwrite*/true);
优缺点分析: 1. 该库同时实现了压缩和解压功能,只需提供路径即可对已存在的文件或文件夹进行操作,接口丰富且使用简单。 2. 该库本身存在bug,有时解压后的文件无法完全还原。希望未来这些bug能得到修复。
JSZip库的使用与优缺点
二、使用JSZip 使用JSZip时,需要逐个将文件添加到zip对象中,并手动添加文件内容,最后通过写文件操作将内存中的zip对象转换为物理存储。因此,对于整个文件夹的操作较为繁琐,需要遍历文件夹。
var JSZip = require("jszip");
var fs = require("fs");
var zip = new JSZip();
var file_content = fs.readFileSync('archive/a.txt');
zip.file("a.txt",file_content);
var data = fs.readFileSync("archive/img/pic.jpeg");
zip.file("img/pic.jpeg", data, {base64: true});
var zipfolder = zip.generate({type:"nodebuffer"});
fs.writeFile("jszip.zip", zipfolder, function(err) {
if (err) throw err;
});
JSZip中的folder方法仅用于切换zip对象内部的虚拟路径,例如zip.folder("img").file('a.txt')即在zip中添加一个img子目录,并在其下创建a.txt,效果等同于zip.file("img/a.txt")。需要注意的是,文件内容需手动添加,若仅执行zip.file("a.txt");则仅在zip对象中创建了一个内容为空的txt文件,且该文件仅存在于内存中,需执行写文件操作后才会真正存储到磁盘。
优缺点分析: 1. 适用于将实时接收的数据转换为zip格式。 2. 对于已存在的文件夹操作不便,需逐个将内容添加到zip对象,再转换为文件。 3. 需注意多种编码问题。 4. 仅具备压缩功能。
archiver与unzip组合的使用与优缺点
三、使用archiver和unzip 这是最终选择的方案,较为可靠且使用简单。其中archiver功能强大,支持zip和tar格式,只需提供路径即可压缩已存在的文件夹。压缩代码示例如下:
var fs = require('fs');
var archiver = require('archiver');
var output = fs.createWriteStream('archiver-unzip.zip');
var archive = archiver('zip');
archive.on('error', function(err){
throw err;
});
archive.pipe(output);
archive.bulk([
{ src: ['archiver/**']}
]);
archive.finalize();
解压代码示例如下:
var fs = require("fs");
var unzip = require("unzip");
fs.createReadStream('archiver-unzip.zip').pipe(unzip.Extract({ path: 'unarchive' }));
优缺点分析: 1. 经过长期测试,bug较少。 2. 使用便捷,无需遍历文件夹。 3. 各库仅提供压缩或解压功能,未同时实现两者。(因此adm-zzip其实很好用,但bug是硬伤...)
以上是我昨天找到的一些库,欢迎推荐其他库。
JavaScript异步发送HTTP请求时怎么优雅地处理错误
2026-11-05 17:10:44
5款主流JS在线运行工具对比:CodePen、JSFiddle与StackBlitz怎么选
2026-11-05 17:04:04
JavaScript入门书籍避坑:这些书不适合初学者
2026-11-05 16:31:15
JS使用Math.round实现保留两位小数的原理与代码
2026-11-05 15:35:55
JavaScript 原生 Date 对象怎么实现日期加减
2026-11-05 14:30:00
