需要使用Node.js压缩整个目录

我需要使用Node.js压缩整个目录。 我目前正在使用node-zip,并且每次进程运行时都会生成一个无效的ZIP文件(正如您从Github的问题中看到的那样)。

是否有另一个更好的Node.js选项可以让我压缩一个目录?

编辑:我结束了使用归档

writeZip = function(dir,name) { var zip = new JSZip(), code = zip.folder(dir), output = zip.generate(), filename = ['jsd-',name,'.zip'].join(''); fs.writeFileSync(baseDir + filename, output); console.log('creating ' + filename); }; 

参数的样本值:

 dir = /tmp/jsd-<randomstring>/ name = <randomstring> 

更新:对于那些询问我使用的实现, 这是一个链接到我的下载 :

我结束了使用存档库。 很好用。

 var file_system = require('fs'); var archiver = require('archiver'); var output = file_system.createWriteStream('target.zip'); var archive = archiver('zip'); output.on('close', function () { console.log(archive.pointer() + ' total bytes'); console.log('archiver has been finalized and the output file descriptor has closed.'); }); archive.on('error', function(err){ throw err; }); archive.pipe(output); archive.bulk([ { expand: true, cwd: 'source', src: ['**'], dest: 'source'} ]); archive.finalize(); 

要包含所有文件和目录:

 archive.bulk([ { expand: true, cwd: "temp/freewheel-bvi-120", src: ["**/*"], dot: true } ]); 

它使用下面的节点glob( https://github.com/isaacs/node-glob ),所以任何匹配的expression式都可以工作。

现在不推荐使用Archive.bulk ,为此使用的新方法是glob :

 var fileName = 'zipOutput.zip' var fileOutput = fs.createWriteStream(fileName); fileOutput.on('close', function () { console.log(archive.pointer() + ' total bytes'); console.log('archiver has been finalized and the output file descriptor has closed.'); }); archive.pipe(fileOutput); archive.glob("../dist/**/*"); //some glob pattern here archive.glob("../dist/.htaccess"); //another glob pattern // add as many as you like archive.on('error', function(err){ throw err; }); archive.finalize(); 

Adm-zip的问题只是压缩一个现有的存档https://github.com/cthackers/adm-zip/issues/64以及压缩二进制文件的损坏。;

我也遇到了节点压缩压缩腐败问题https://github.com/daraosn/node-zip/issues/4

node-archiver是唯一能够很好地压缩但是没有任何解压缩function的节点。

要将结果传递给响应对象(需要下载zip而不是本地存储的场景)

  archive.pipe(res); 

山姆的访问目录的内容提示为我工作。

 src: ["**/*"]