Better Npm Run

🏃‍♂️ Better NPM scripts runner
Alternatives To Better Npm Run
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Webpack Dev Server7,624435,21577,9588 hours ago203September 19, 202255mitJavaScript
Serves a webpack app. Updates the browser on changes. Documentation
Npm Run All4,66344,01728,492a year ago58November 24, 201884mitJavaScript
A CLI tool to run multiple npm-scripts in parallel or sequential.
Nps1,391930645a year ago36July 10, 202025mitJavaScript
NPM Package Scripts -- All the benefits of npm scripts without the cost of a bloated package.json and limits of json
Ultra Runner1,1335a month ago45February 28, 202137apache-2.0TypeScript
🏃⛰ Ultra fast monorepo script runner and build tool
Awesome Npm Scripts672
8 months agocc0-1.0
Everything awesome related to npm scripts and using npm as a build tool.
Better Npm Run6413,4856379 months ago17July 31, 20183mitJavaScript
🏃‍♂️ Better NPM scripts runner
Tasksfile3522393277 months ago43January 25, 2019mitTypeScript
Minimalistic task runner for node.js
Vscode Npm Scripts208
4 months ago2mitTypeScript
VSCode extension for running npm-scripts and validating the package.json files.
Npm Run1791,5852545 years ago14April 12, 20186mitJavaScript
Run locally-installed node module executables.
Node Themekit1168245a year ago24June 23, 202124mitJavaScript
Theme asset interaction library and management tools written in Node.js
Alternatives To Better Npm Run
Select To Compare

Alternative Project Comparisons


This solution is outdated. Check out kentcdodds/cross-env which might better suit your needs!


Join the chat at

Build Status

PRs Welcome


Better NPM scripts runner

Inspired by


Usage in package.json

From this:

  "scripts": {
    "build:dist": "NODE_ENV=development webpack --config $npm_package_webpack --progress --colors",
    "test": "NODE_ENV=production karma start"

To this:

  "devDependencies": {
    "better-npm-run": "~0.0.1"
  "scripts": {
    "build:dist": "better-npm-run build:dist",
    "build:prod": "better-npm-run build:prod",
    "test": "better-npm-run test"
  "betterScripts": {
    "build:dist": "webpack --config $npm_package_webpack --progress --colors",
    "build:prod": {
      "command": "webpack --config $npm_package_webpack --progress --colors",
      "env": {
        "NODE_ENV": "production"
    "test": {
      "command": "karma start",
      "env": {
        "NODE_ENV": "test"

The betterScripts script definition can either be a string or sub-object with command and env attributes. Values defined in the env block will override previously set environment variables.

Note that depending on the OS and terminal you're using, dots, spaces or other special characters in the command path may be treated as separators and the command will be parsed wrong.

  "serve:dist": "./node_modules/.bin/webpack-dev-server --hot --inline --config webpack/development.js"

To prevent this you need to explicitly wrap the command path with double quotes:

  "serve:dist": "\"./node_modules/.bin/webpack-dev-server\" --hot --inline --config webpack/development.js"

.env File

If you have an .env file in your project root it will be loaded on every command.


Environment variables defined in the betterScripts script definition will take precedence over .env values.

Shell scripts

Currently, using bash variables (PWD, USER, etc.) is not possible:

  "command": "forever start -l ${PWD}/logs/forever.log -o ${PWD}/logs/out.log -e ${PWD}/logs/errors.log -a index.js",

In order to use them, you can create an script file (.sh) instead:

forever start -l ${PWD}/logs/forever.log -o ${PWD}/logs/out.log -e ${PWD}/logs/errors.log -a index.js


  "command": "./"

cli commands

This module expose 2 cli commands:

  • better-npm-run and,
  • a shorter one: bnr which is an alias to the former.

The shorter one is useful for cases where you have a script that calls several better-npm-run scripts. e.g:

using the normal cli name

"scripts": {
  "dev": "shell-exec 'better-npm-run install-hooks' 'better-npm-run watch-client' 'better-npm-run start-dev' 'better-npm-run start-dev-api' 'better-npm-run start-dev-worker' 'better-npm-run start-dev-socket'",

using the shorter alias

"scripts": {
  "dev": "shell-exec 'bnr install-hooks' 'bnr watch-client' 'bnr start-dev' 'bnr start-dev-api' 'bnr start-dev-worker' 'bnr start-dev-socket'",

And for silence output, you can use -s or verbose --silence flags

bnr -s watch-client

And you can use -p or verbose --path to specify a custom path of dotenv file

bnr --path=/custom/path/to/your/env/vars start-dev

Also use -e or verbose --encoding to specify the encoding of dotenv file

bnr --encoding=base64 start-dev

See envdot docs for more infomation

Popular Npm Scripts Projects
Popular Command Line Projects
Popular Build Tools Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Command Line
Npm Scripts