zip-local
Why another one?!
I was working on a poject and I needed something to zip and unzip local directories, so I went and searched on npm. I got quite a lot of results and all of them worked perfectly with files, but it when it came to directories each of them suffered from at least one of these three problems:
- not being asynchronous
- not being developer-friendly
- having odd behaviors (like zipping the whole path to root along with the directory)
So I wrote this to provide something free of the three problems!
Installation
using npm:
npm install zip-local
Usage
The API comes in two versions: an asynchrnous version and a synchronous one. This gives you the choice to use whichever suitable for your application.
Zipping
Zipping is done through ZipLocal.zip
or its synchronous version ZipLocal.sync.zip
by passing the path to the file or directory that needs to be zipped. In the asynchrnous version, the callback is passed an instance of ZipExport
object that contains the APIs to export the
zipped file. In the synchronous version, the ZipExport
object is returned.
Here's an example of asynchronous zipping,
var zipper = require("zip-local");
zipper.zip("./hello-world.cpp", function(zipped) {
zipped.compress();
var buff = zipped.memory();
zipped.save("../package.zip", function() {
console.log("saved successfully !");
});
});
and here's synchronous zipping,
var zipper = require('zip-local');
var buff = zipper.sync.zip("./hello-world.java").memory();
zipper.sync.zip("./hello/world/").compress().save("pack.zip");
Unzipping
Similiarly, unzipping is done through ZipLocal.unzip
or the synchronous ZipLocal.sync.unzip
by passing the path to the zip file. Like the zipping functions, these functions also use the ZipExport
object for exporting your unzipped file, but in case of exporting in memory the memory
function returns a ZippedFS
object instead of a buffer. This objects servers as a mini-filesystem for the unzipped file.
An example for asynchronous unzipping,
var zipper = require('zip-local');
zipper.unzip("../package.zip", function(unzipped) {
unzipped.save(null, function() { });
var unzippedfs = unzipped.memory();
console.log(unzippedfs.contents());
var txt = unzippedfs.read("hello-world.cpp", 'text');
var buff = unzippedfs.read("hello-world.cpp", 'buffer');
});
and the synchronous unzipping,
var zipper = require('zip-local');
zipper.sync.unzip("pack.zip").save("../../hello");
var unzippedfs = zipper.sync.unzip("pack.zip").memory();
console.log(unzippedfs.contents());
var buff = unzippedfs.read("cpp/hello-world.cpp", "buffer");
read the API documentations for furthur details.
License
MIT