How to suppress output when running npm scripts

I have decided to experiment with npm scripts as a build tool and so far I like it. One issue I'd like to solve is when running a script to run jshint when something doesn't pass linting I get a ton of "npm ERR!" lines. I would like to suppress these as the output from the linter is more meaningful.

Is there a good way to set this globally and is there a way to set it for each script run?


All scripts:

You can fix this by suppressing the output of npm overall, by setting the log level to silent in a couple ways:

On each npm run invocation:

npm run --silent <your-script>

Or globally by creating a .npmrc file(this file can be either in your project directory or your home folder) with the following:

loglevel=silent

Resources:

npm log level config: https://docs.npmjs.com/misc/config#loglevel

npmrc: https://docs.npmjs.com/misc/config#loglevel

Each script, individually:

A simple trick I've used to get around this issue on certain scripts like linting is to append || true at the end of such scripts. This will work without any npm config changes.

This will ensure that the script will always exit with a 0 status. This tricks npm into thinking the script succeed, hence hiding the ERR messages. If you want to be more explicit, you can append || exit 0 instead and it should achieve the same result.

{
  "scripts": {
    "lint": "jshint || true",
   }
}

You should be able to use both the --quiet and --silent options, as in

npm install --quiet

--quiet will show stderr and warnings, --silent should suppress nearly everything

You can also send stdout/stderr to /dev/null, like so:

npm install > '/dev/null' 2>&1

or less versbose

npm install &> '/dev/null'

npm install --quiet --no-progress 

Will keep warnings and errors, and suppress the ADHD progress bar on terminals that support it.


for an individual script that you want to keep silent without having to add --silent each time, you can make a new script that calls your previous one and adds --silent.

My example scripts in package.json:

    "dev-loud": "npm run build && nodemon -r dotenv/config dist/index.js",
    "dev": "npm run dev-loud --silent"