npm install --save-dev npm-build-zip
Requires Node.js >= 22 (v1.x supports Node 18+).
Modify YourApp/package.json:
"scripts": {
"zip": "npm-build-zip"
}Create the .zip file containing the build folder:
npm run zip| Flag | Alias | Default | Description |
|---|---|---|---|
--source=<dir> |
--src, -s |
./build |
Folder to zip. |
--destination=<dir> |
--dst, -d |
. (cwd) |
Output folder. Created if missing. |
--includes=pkg1,pkg2 |
--in |
'' |
Comma-separated list of packages to bundle (npm-packlist bundled). |
--name=demo |
-n |
'' |
Suffix appended to the filename, or full name with --name_only. |
--name_only |
--no |
false |
When passing --name, use it as the full filename. |
--info |
-i |
false |
Print the archive path. |
--verbose |
-v |
false |
Print every file added to the archive. |
--include_hidden |
--all |
false |
Include dotfiles and bypass .gitignore/.npmignore. |
--exclude=*.map,**/*.test.js |
-x |
'' |
Comma-separated globs to exclude (Node 22+, fs.promises.glob). |
--no-timestamp |
— | false |
Embed 1980-01-01 00:00 mtimes for reproducible builds. |
--help |
-h |
— | Show usage. |
--version |
-V |
— | Show version. |
By default the file is named <sanitized-package-name>_<sanitized-package-version>[.<suffix>].zip.
- If both
--nameand--name_onlyare set, the file is named<name>.zipandpackage.json#name/#versionare not required. - If
package.jsonis missing or has noname/version, the command exits with a clear error explaining how to fix it.
The 2.0.0 release drops three runtime dependencies (archiver-promise, sanitize-filename, yargs) and switches to ESM-first. The user-facing CLI is unchanged — all flags and aliases work the same way. The breaking changes are:
- Node.js >= 22 is required (was 18). If you can't upgrade, pin to
1.2.x. - CJS
require('npm-build-zip')is still supported viaindex.cjsshim, butpackreturns a Promise —.then()orawaitis required. - ESM users:
import { pack } from 'npm-build-zip'works as expected.
Apache-2.0