const fs = require('fs-extra'); const Promise = require('bluebird'); const zipFolder = (folderToZip, destination, callback) => { var archiver = require('archiver'), output = fs.createWriteStream(destination), archive = archiver.create('zip', {}); // If folder to zip is a symlink, we want to get the target // of the link and zip that instead of zipping the symlink if (fs.lstatSync(folderToZip).isSymbolicLink()) { folderToZip = fs.realpathSync(folderToZip); } output.on('close', function () { callback(null, archive.pointer()); }); archive.on('error', function (err) { callback(err, null); }); archive.glob(`**/*`, { cwd: folderToZip, ignore: ['node_modules/**'] }); archive.pipe(output); archive.finalize(); }; module.exports = Promise.promisify(zipFolder);