2016-12-19 15 views
0

いくつかのプロセスを自動化してから、いくつかのファイルをzipにしてから、このzipも圧縮する必要があります。私はノードアーカイバを使用していますが、私が書いたコードは動作しません。いくつかのファイルを圧縮してからzipを圧縮するノードjs

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

ジップにジップがありますが、2番目のジップ内にファイルを取得できません。 –

答えて

0

戻り値のコールバックパラメータを適切に処理していません。これに

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

:それは外zipコールに渡される値を返すことができますので、あなたは、内側zipコールを呼び出している最初のケースで

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

はこれを変更してみてください。 zipは何も返さないので、エラーが報告されないのはundefinedになります。

関連する問題