Some Helpful Packages for NPM Scripts
Here are a couple helpful packages that will help you write better npm-scripts.
rimraf
rimraf is a package for removing directories. It is the equivalent of running rm -rf
. You could, of course, use this unix command directly in your npm-scripts, but then your windows users would be hosed.
First, install:
npm instlal rimraf --save-dev
Then add the script to your package.json
that will blow away your dist
(or other) directory:
{
"scripts": {
"clean": "rimraf dist"
}
}
And run with:
npm run clean
Simple, helpful, cross-platform directory removal. So clean!
cross-env
And speaking of cross-platform, why does every system have to have its own syntax for setting environment variables? Never mind that any more! From within npm-scripts, now you can set them in a consistent way, using cross-env.
Install:
npm install cross-env --save-dev
Then imagine that we have a need to set the NODE_ENV
environment variable to 'production'
when we run our server.js
script. That script in package.json
might look like:
{
"scripts": {
"start": "cross-env NODE_ENV=production node server"
}
}
You can have multiple of these space-separated key=value
pairs before your command.
concurrently
Finally!, here's package that is good at forking children. With this package you can use one npm-scripts target to run multiple things at once. The package is called concurrently. Let's say you want to simultaneously run a webpack build process, generating some static output, and spin up a simple http service to serve that static output directory.
Let's install our helper package:
npm install concurrently --save-dev
Then update our package.json
:
{
"scripts": {
"start": "concurrently \"webpack --watch\" \"http-server dist\"",
}
}
Note the escaped use of the \"
quotes inside the script. Also note that these other utilities must be installed dependencies as well. We can run as many processes as we need, separated by spaces, surround by quotes.
These are a few of my favorite utility helpers that are generally useful in writing npm-scripts. What are some of your favorite packages to use when writing npm-scripts?