/npm-run-parallel

Run npm tasks in parallel and exit when they are all done

Primary LanguageJavaScript

Run npm tasks in parallel and exit when they are all done.

Build Status

Installation

Locally (recommended, especially with npm scripts):

npm install npm-run-parallel

Globally, as a CLI:

npm install -g npm-run-parallel

Usage

From the command line, or an npm script:

npm-run-parallel <npm scripts>

So, if I want to run npm install and npm test in parallel (a contrived example, I know!):

npm-run-parallel install test

The process will complete when both npm install and npm test finish.

Note: you can run custom npm scripts, too. Just like you would install or test above.

Why?

On a given project, there are likely some long or expensive npm scripts, like asset compilation or multi-directory dependency installs. It's faster to do these in parallel.

A common way to run any shell command (which an npm script is) is the & operator, which creates a subprocess. This subprocess runs separately, so the original process can never tell how or when the subprocess ended. In a similar vein, the | operator can pipe the output of one command to another. This can feel like streaming, but passing the output of one npm script to another is both a hack and prone to erroring out.

Some build tools, like gulp, accomplish parallel commands (a.k.a. tasks) with streaming libraries. The recent trend towards npm scripts from these walled-garden tools necessitated emulating that functionality. So npm-run-parallel all the tasks!

Do I get colored terminal output from my tasks?

Yes! It's awesome. I learned a lot about streams and stdout in the process of making this.

Contributing

See CONTRIBUTING.md for the code of conduct.

Local development

  • npm run watch - Compile source code, and watch for changes

  • npm run lint - Lints source code (eslint)

  • npm run test:watch - Run tests and watch for file changes

Other commands

  • npm run build - Compiles source code (also used in prepublish)

  • npm run test - Run unit tests once

  • npm run start -- - Emulates the cli interface (note: pass it task arguments. Useful for manual testing.)