It works similar to the unzip
module:
var fs = require('fs');
var tar = require('tar');
var zlib = require('zlib');
var path = require('path');
var mkdirp = require('mkdirp'); // used to create directory tree
var log = console.log;
var tarball = 'path/to/downloaded/archive.tar.gz';
var dest = 'path/to/destination';
fs.createReadStream(tarball)
.on('error', log)
.pipe(zlib.Unzip())
.pipe(tar.Parse())
.on('entry', function(entry) {
if (/\.js$/.test(entry.path)) { // only extract JS files, for instance
var isDir = 'Directory' === entry.type;
var fullpath = path.join(dest, entry.path);
var directory = isDir ? fullpath : path.dirname(fullpath);
mkdirp(directory, function(err) {
if (err) throw err;
if (! isDir) { // should really make this an `if (isFile)` check...
entry.pipe(fs.createWriteStream(fullpath));
}
});
}
});