我需要自动化一些过程,首先将一些文件抓取到一个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', './'));
});
答案 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
,这就是没有报告错误的原因。