与其他答案相比,现在有一种更简单的方法。
存档器(npmjs 上的页面)现在有一个名为“目录”的方法来帮助您执行此操作。
安装归档器:
npm install archiver --save
递归压缩目录并将其写入文件需要做四件事。
A. 通过使用创建归档器实例
var ar = archive.create('zip',{});
B. 创建一个 fs.writeStream 并设置它的事件处理程序......
var outputStream = fs.createWriteStream(odsFilepath, {flags: 'w'});
outputStream.on('close', function () {
console.log(ar.pointer() + ' total bytes written');
console.log('ODS file written to:', odsFilepath);
});
...
C. 将归档器的输出连接到我们创建的 writeStream:
ar.pipe(outputStream);
D. 要求我们的归档器压缩目录的内容并将其放在我们的 zip 文件的“根”或“/”中。
ar.directory(directoryPathToAddToZip, '/')
.finalize();
这是我使用它的函数的代码片段。注意:将以下代码段放入文件中,例如 index.js
var archiver = require('archiver');
var utility = require('utility');
var path = require('path');
var fs = require('fs');
//This is the directory where the zip file will be written into.
var outputDirname = ".";
//This directory should contain the stuff that we want to
// put inside the zip file
var pathOfContentDirToInsertIntoArchive = "./tozip";
saveToZip(function () {
console.log('We are now done');
});
function saveToZip(done) {
//we use the utility package just to get a timestamp string that we put
//into the output zip filename
var ts = utility.logDate();
var timestamp = ts.replace(/[ :]/g, '-');
var zipFilepath = path.normalize(outputDirname + '/' + timestamp + '.zip')
var ar = archiver.create('zip', {});
var output = fs.createWriteStream(zipFilepath, {flags: 'w'});
output.on('close', function () {
//console.log(ar.pointer() + ' total bytes');
console.log('ZIP file written to:', zipFilepath);
return done(null, 'Finished writing')
});
ar.on('error', function (err) {
console.error('error compressing: ', err);
return done(err, 'Could not compress');
});
ar.pipe(output);
ar.directory(path.normalize(pathOfContentDirToInsertIntoArchive + '/'), '/')
.finalize();
}
然后做一个npm install archiver --save
和npm install utility --save
然后在当前目录中创建一个名为“tozip”的目录,并在其中放入一些您想要压缩到输出 zip 文件中的文件。
然后,运行node index.js
,您将看到类似于以下内容的输出:
$ node index.js
ZIP file written to: 2016-12-19-17-32-14.817.zip
We are now done
创建的 zip 文件将包含压缩后的 tozip 目录的内容。