This module provides a bestzip
command that calls the native zip
command if available and otherwise falls back to a
Node.js implementation.
The --recurse-directories
(-r
) option is automatically enabled.
The native zip
command on GNU/Linux and macOS is significantly faster and creates moderately smaller .zip files than the Node.js version included here, but Windows has no built-in zip
command. This module provides the best of both worlds, and allows for easier cross-platform scripting.
npm install -g bestzip
bestzip destination.zip source/ [other sources...]
npm install --save-dev bestzip
package.json:
{
//...
"scripts": {
"build" "...",
"zip": "bestzip bundle.zip build/*",
"upload": "....",
"deploy": "npm run build && npm run zip && npm run upload"
}
}
var zip = require('bestzip');
zip({
source: 'build/*',
destination: './destination.zip'
}).then(function() {
console.log('all done!');
}).catch(function(err) {
console.error(err.stack);
process.exit(1);
});
// v1.x API also works for backwards compatibility: zip(destination, sources, callback)
source
: Path or paths to files and folders to include in the zip file. String or Array of Strings.destination
: Path to generated .zip file.cwd
: Set the Current Working Directory that source and destination paths are relative to. Defaults toprocess.cwd()
level
: Set the level of compression. (Number 0-9, with 0 being no compression and 9 being the most compressed.)
The directory structure in the .zip is going to match your input files, but the exact details depend on how the command is called. For example:
bestzip build.zip build/*
This includes the build/ folder inside of the .zip
Alternatively:
cd build/ && bestzip ../build.zip *
This will not include the build/ folder, it's contents will be top-level.
Note: some tools, including the Archive Utility built into macOS, will automatically create a top-level folder to group everything together when extracting a .zip archive that contains multiple top-level files.
When using the programmatic API, the same effect may be achieved by passing in the cwd
option.
Wildcards (*
) ignore dotfiles.
- To include a dotfile, either include the directory it's in (
folder/
) or include it by name (folder/.dotfile)
- To omit dotfiles, either use a wildcard (
folder/*
) or explicitly list the desired files (folder/file1.txt folder/file2.txt
)
bestzip output.zip foo/bar/file.txt
now includes the foo/bar/ folders, previously it would place file.txt at the top-level- This was done to more closely align with the native zip command