2016-12-19 4 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

zip에 우편 번호가 있지만 두 번째 우편 번호 안에 파일을 가져올 수 없습니다. –

답변

0

반환 라인에서 콜백 매개 변수를 제대로 처리하지 않습니다.

보십시오이 변경 : 여기에

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

: 첫 번째 경우는 값을 반환 할 수 있도록 내부 zip 전화 호출에

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

외부 zip 호출에 전달한다 . zip은 아무 것도 반환하지 않으므로 undefined이되므로 오류가보고되지 않습니다.

관련 문제