Search code examples
javascriptnode.jsziparchive

Zip application from the current folder


i’ve node.js app that I Need to zip all the current folder with command from and get the zip on the root

For that I want to use the archiver npm package but I don’t understand the following:

  1. where I put the current folder (since I want to zip all the application )
  2. where should I put the name of the zip (the zip that should be created when execute the command)

My app have the following structure

MyApp
  Node_modules
  server.js
  app.js 
  package.json
  arc.js

In the arc.js I’ve put all the zip logic so I guess I need to provide zipPath (which in my case is ‘./‘) and zip name like myZip…

I tried with the following without success, any idea ?

var fs = require('fs');
var archiver = require('archiver');

// create a file to stream archive data to.
var output = fs.createWriteStream(__dirname + '/.');
var archive = archiver('zip', {
    zlib: { level: 9 } // Sets the compression level.
});

// listen for all archive data to be written
output.on('close', function() {
    console.log(archive.pointer() + ' total bytes');
    console.log('archiver has been finalized and the output file descriptor has closed.');
});

archive.on('warning', function(err) {
    if (err.code === 'ENOENT') {
        // log warning
    } else {
        // throw error
        throw err;
    }
});

// good practice to catch this error explicitly
archive.on('error', function(err) {
    throw err;
});

// pipe archive data to the file
archive.pipe(output);

I need that when I open the command line like

folder->myApp-> run zip arc and will create zipped file under the current path (which is the root in this case....)


Solution

  • You can use the glob method, but make sure to exclude *.zip files. Otherwise the zip file itself will be part of the archive. Here is an example:

    // require modules
    var fs = require('fs');
    var archiver = require('archiver');
    
    // create a file to stream archive data to.
    var output = fs.createWriteStream(__dirname + '/example.zip');
    var archive = archiver('zip', {
        zlib: { level: 9 } // Sets the compression level.
    });
    
    // listen for all archive data to be written
    output.on('close', function () {
        console.log(archive.pointer() + ' total bytes');
        console.log('archiver has been finalized and the output file descriptor has closed.');
    });
    
    // good practice to catch warnings (ie stat failures and other non-blocking errors)
    archive.on('warning', function (err) {
        if (err.code === 'ENOENT') {
            // log warning
        } else {
            // throw error
            throw err;
        }
    });
    
    // good practice to catch this error explicitly
    archive.on('error', function (err) {
        throw err;
    });
    
    // pipe archive data to the file
    archive.pipe(output);
    
    archive.glob('**/*', { ignore: ['*.zip'] });
    
    archive.finalize();