在nodejs中的Zip中附加目录

时间:2015-05-21 09:00:52

标签: node.js zip fs

我正在尝试使用 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。是的,我可以压缩入口目录,然后像文件一样添加,然后解压缩...但是不是一个好的解决方案

3 个答案:

答案 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'。