npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

bestzip

v2.2.1

Published

Uses OS zip command if avaliable (for better performance and speed) or node.js version if there is no system command avaliable. Can be called via node or command line.

Downloads

1,458,289

Readme

bestzip

Build status npm version npm downloads

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.

Why?

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.

Global command line usage

npm install -g bestzip
bestzip destination.zip source/ [other sources...]

Command line usage within package.json scripts

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"
    }
}

Programmatic usage from within Node.js

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)

Options

  • 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 to process.cwd()

How to control the directory structure

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.

.dotfiles

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)

Breaking changes for v2

  • 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