Skip to content

Instantly share code, notes, and snippets.

@victornpb
Created December 18, 2019 18:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save victornpb/3fa03a31ddcaeaf11d4feb1b041594f7 to your computer and use it in GitHub Desktop.
Save victornpb/3fa03a31ddcaeaf11d4feb1b041594f7 to your computer and use it in GitHub Desktop.
Zip file on nodeJS using subprocess
const path = require('path');
const { spawn } = require('child_process');
(async () => {
try {
await zip(path.resolve(__dirname, 'foo.js'), path.resolve(__dirname, 'bar.zip'));
console.log('OK');
} catch (err) {
console.error('Failed to zip!', err);
}
})();
function zip(inputFile, outputFile, timeout=(1000*60*5)) {
return new Promise((resolve, reject) => {
const subprocess = spawn('zip', [outputFile, inputFile], {
shell: false,
stdio: 'ignore',
cwd: __dirname,
});
// subprocess.stdout.on('data', data=>console.log(data.toString()));
//failed to spawn process
subprocess.on('error', reject);
const t = setTimeout(() => {
subprocess.kill();
reject(new Error('TIMEDOUT'));
}, timeout);
//process exited
subprocess.on('exit', (code, signal) => {
clearTimeout(t);
if (code === 0) {
resolve();
}
else {
reject(code || signal);
}
});
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment