How to suppress output when running npm scripts
node.jsNpmnode.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