压缩一些文件然后压缩zip节点js

时间:2016-12-19 15:13:10

标签: node.js zip

我需要自动化一些过程,首先将一些文件抓取到一个zip中,然后这个zip也应该压缩。我使用的是节点存档程序,但我编写的代码不起作用。

function zip(name, files, path, callback) {

    let output = fs.createWriteStream(name + '.zip'),
        archive = archiver('zip', {store: true});

    output.on('close', () => {
        console.log(archive.pointer() + ' total bytes');
        console.log('archiver has been finalized and the output file descriptor has closed.');
    }); 

    archive.on('error', err => {
        throw err;
    });

    archive.pipe(output);

    if(files.constructor === Array) 
        files.forEach((e, i) => {
            archive.append(fs.createReadStream(path + e), {name: e});
        });
    else 
         archive.append(fs.createReadStream(path + files), {name: files});

    archive.finalize();

    if(callback) {
        callback();
    }
}
fs.readFile(widgetPath + widgetFileName + '.manifest', 'utf8', (err, json) => {

    let jsonData = JSON.parse(json),
        name = jsonData.name;

    return zip(name, [fileJS, fileManifest, fileHtml], widgetPath,
         zip(name, name + '.zip', './'));

});

1 个答案:

答案 0 :(得分:0)

您没有从退货行正确处理回调参数。

尝试更改此内容:

return zip(name, [fileJS, fileManifest, fileHtml], widgetPath,
     zip(name, name + '.zip', './'));

对此:

return zip(name, [fileJS, fileManifest, fileHtml], widgetPath,
     () => zip(name, name + '.zip', './'));

在第一种情况下,您正在调用内部zip调用,因此它可以返回一个值以传递给外部zip调用。由于zip不返回任何内容,因此会导致undefined,这就是没有报告错误的原因。