A tiny CLI tool to conditionally run npm scripts or shell commands based on environment variables, file existence, and more.
Install globally:
npm install -g npm-run-if
Or use with npx
:
npx npm-run-if --help
Sometimes you want to run a script only if certain conditions are met, for example:
- ✅ Run
npm run build
only ifNODE_ENV=production
- ✅ Run tests only if certain files exist
- ✅ Skip steps in dry-run mode
- ✅ Show a fallback message if preconditions fail
makes this super easy with a simple, zero-config CLI.
- ✅ Run any command only if conditions are met
- 🌍 Works cross-platform (macOS, Linux, Windows)
- ⚡ Blazing fast and dependency-light
- 🧪 Dry-run support to preview what would be run
- 🧵 Easily chain with npm/yarn scripts or CI pipelines
npm-run-if [options]
Option | Description | Example |
---|---|---|
--env |
Require environment variable match | --env NODE_ENV=production |
--not-env |
Require env not to match | --not-env DEBUG=true |
--require-env |
Require env var to be set (non-empty) | --require-env GITHUB_TOKEN |
--exists |
Require file(s)/glob to exist | --exists src/*.ts |
--not-exists |
Require file(s)/glob not to exist | --not-exists dist/bundle.js |
--run |
The command to run (required) | --run "npm run build" |
--else-run |
Fallback command if conditions fail | --else-run "echo Skipping..." |
--dry-run |
Preview what would be run | --dry-run |
--help |
Show help output | --help |
npm-run-if --env NODE_ENV=production --run "npm run build"
npm-run-if --exists src/index.ts --run "npm run build" --else-run "echo Skipping build"
npm-run-if --not-exists dist/index.js --run "npm run build"
npm-run-if --env DEBUG=true --run "npm test" --dry-run
- Parses CLI arguments (
--env
,--exists
, etc.) - Evaluates all conditions:
- Matches env vars and patterns
- Checks file existence (globs supported)
- Executes shell checks (optional)
- If all pass, runs your command via
child_process.execSync
- If
--dry-run
, it simply prints what would happen
MIT - hxpe-dev
Want to contribute a new condition type (e.g. port check, changed files, config-based conditions)? PRs and issues are welcome!
Made with ❤️ by hxpe