How to suppress output when running npm scripts

node.jsNpm

node.js Problem Overview


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?

node.js Solutions


Solution 1 - node.js

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",
   }
}

Solution 2 - node.js

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'

Solution 3 - node.js

npm install --quiet --no-progress 

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

Solution 4 - node.js

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"

Solution 5 - node.js

You can do this inside your script by removing the event listeners

#!/usr/bin/env node

process.removeAllListeners('warning');

// Do your thang without triggering warnings

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser4479529View Question on Stackoverflow
Solution 1 - node.jsSanketh KattaView Answer on Stackoverflow
Solution 2 - node.jsAlexander MillsView Answer on Stackoverflow
Solution 3 - node.jsMichael ColeView Answer on Stackoverflow
Solution 4 - node.jsmmmmView Answer on Stackoverflow
Solution 5 - node.jsErisDSView Answer on Stackoverflow