需要使用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: ["**/*"]