我正在尝试使用 node-archiver 在zip中添加一个条目目录。
当我只添加文件时,它就像:
var fs = require('fs');
var archiver = require('archiver');
var output = fs.createWriteStream(__dirname + '/example-output.zip');
var archive = archiver('zip');
output.on('close', function() {
console.log('archiver has been finalized and the output file descriptor has closed.');
});
archive.on('error', function(err) {
throw err;
});
archive.pipe(output);
var file1 = __dirname + '/fixtures/file1.txt';
archive
.append(fs.createReadStream(file1), { name: 'file1.txt' })
.finalize();
并且工作得很好......但是如果我想添加一个目录,我不知道该怎么做。
PS。是的,我可以压缩入口目录,然后像文件一样添加,然后解压缩...但是不是一个好的解决方案
答案 0 :(得分:3)
查看bulk
选项。这是一个修改过的示例from the archiver docs。 cwd是上下文根,src是glob模式。 **
将拉取所有文件作为示例。因为它基本上只是流,所以你可以将它们链接在一起,就像下面的例子一样。
var fs = require('fs');
var archiver = require('archiver');
var output = fs.createWriteStream(__dirname + '/bulk-output.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
.append(fs.createReadStream('./file1.txt'), {name: 'file1.txt'})
//append more files here
.bulk([{
expand: true,
cwd: './',
src: ['**/*.js'] //src takes an array of directory glob patterns, can specify multiple entries here
}]);
archive.finalize();
答案 1 :(得分:0)
我解决了这个问题,使用ncp package https://www.npmjs.com/package/ncp然后归档,我认为这更容易。
答案 2 :(得分:0)
首先,没有必要附加空类别。
第二,archive.append(source, EntryData)
。 EntryData中的名称解释为“设置条目名称,包括内部路径。”允许您添加路径。
例如:'./test/file1.txt'。