Skip to content
a streaming interface for archive generation
JavaScript
Branch: master
Clone or download

Latest commit

3 authors fix for a hang with _statQueue (#388)
* fix for a hang with _statQueue

* Update package-lock.json

Co-authored-by: sanji-programmer <sanji-programmer@mail.com>
Co-authored-by: Chris Talkington <chris@talkingtontech.com>
Latest commit 4346329 Mar 20, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/workflows allow testing of pull requests. Feb 22, 2020
benchmark Small fixes (#339) Aug 22, 2018
examples Remove unused variables in examples (#298) Jan 10, 2018
lib fix for a hang with _statQueue (#388) Mar 19, 2020
test fix for a hang with _statQueue (#388) Mar 19, 2020
.gitignore add package-lock.json Aug 10, 2018
.travis.yml test node v12 Jul 20, 2019
CHANGELOG.md bump version for release. Aug 2, 2019
CONTRIBUTING.md update docs and examples. Jan 12, 2013
LICENSE Rename license file May 19, 2015
README.md Update README.md Mar 15, 2019
appveyor.yml test node v12 Jul 20, 2019
index.js docs: initial jsdoc for core. Dec 22, 2015
jsdoc.json update jsdoc config. Aug 27, 2016
netlify.toml Update netlify.toml Mar 15, 2019
package-lock.json bump version for release. Aug 2, 2019
package.json bump version for release. Aug 2, 2019

README.md

Archiver

Build Status Build status

a streaming interface for archive generation

Visit the API documentation for a list of all methods available.

Install

npm install archiver --save

Quick Start

// 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
// 'close' event is fired only when a file descriptor is involved
output.on('close', function() {
  console.log(archive.pointer() + ' total bytes');
  console.log('archiver has been finalized and the output file descriptor has closed.');
});

// This event is fired when the data source is drained no matter what was the data source.
// It is not part of this library but rather from the NodeJS Stream API.
// @see: https://nodejs.org/api/stream.html#stream_event_end
output.on('end', function() {
  console.log('Data has been drained');
});

// 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);

// append a file from stream
var file1 = __dirname + '/file1.txt';
archive.append(fs.createReadStream(file1), { name: 'file1.txt' });

// append a file from string
archive.append('string cheese!', { name: 'file2.txt' });

// append a file from buffer
var buffer3 = Buffer.from('buff it!');
archive.append(buffer3, { name: 'file3.txt' });

// append a file
archive.file('file1.txt', { name: 'file4.txt' });

// append files from a sub-directory and naming it `new-subdir` within the archive
archive.directory('subdir/', 'new-subdir');

// append files from a sub-directory, putting its contents at the root of archive
archive.directory('subdir/', false);

// append files from a glob pattern
archive.glob('subdir/*.txt');

// finalize the archive (ie we are done appending files but streams have to finish yet)
// 'close', 'end' or 'finish' may be fired right after calling this method so register to them beforehand
archive.finalize();

Formats

Archiver ships with out of the box support for TAR and ZIP archives.

You can register additional formats with registerFormat.

Formats will be changing in the next few releases to implement a middleware approach.

You can’t perform that action at this time.