[!CAUTION]
This project is no longer necessary. Node has supported suppressing warnings natively for a while now.
Use this package to prevent certain pesky warnings (e.g. ExperimentalWarning
,
DeprecationWarning
) from causing Node to add noise to generated output, which
can cause all sorts of issues from false positive CI failures from tests
expecting no output to improper text generation from automated processes that
consume stderr.
This is an implementation of my proposed solution to the issue posed here. Node also comes with its own methods of suppressing warnings, though they are inconvenient for a variety of reasons, especially for library authors whose code will be consumed by various runtimes with disparate configurations.
Unlike similar packages, suppress-node-warnings takes care to only suppress the
warnings you're specifically targeting while letting others through and
without clobbering any existing listeners, saving hours of debugging headache
down the road. Additionally, this library does not rely on any horrifying hacks
redefining process.emit
or anything crazy like that. No footguns here!
npm install suppress-node-warnings
To suppress ExperimentalWarning
s and DeprecationWarning
s:
import { suppressWarnings } from 'suppress-node-warnings';
suppressWarnings(['ExperimentalWarning', 'DeprecationWarning']);
To suppress ExperimentalWarning
s and DeprecationWarning
s:
const { suppressWarnings } = require('suppress-node-warnings');
suppressWarnings(['ExperimentalWarning', 'DeprecationWarning']);
This package also looks for a NODE_SUPPRESS_WARNINGS
environment variable and
parses its contents as comma-separated values that are then trimmed. For
example, to suppress ExperimentalWarning
s and DeprecationWarning
s without
explicitly listing them:
// file: my-thing.js
import { suppressWarnings } from 'suppress-node-warnings';
// ...
suppressWarnings();
// ...
NODE_SUPPRESS_WARNINGS=ExperimentalWarning,DeprecationWarning node
my-thing.js
Specifying one or more warnings explicitly and providing the environment variable will result in the two arrays being concatenated.
Further documentation can be found under docs/
.
This is a CJS2 package with statically-analyzable exports
built by Babel for Node.js versions that are not end-of-life. For TypeScript
users, this package supports both "Node10"
and "Node16"
module resolution
strategies.
Expand details
That means both CJS2 (via require(...)
) and ESM (via import { ... } from ...
or await import(...)
) source will load this package from the same entry points
when using Node. This has several benefits, the foremost being: less code
shipped/smaller package size, avoiding dual package
hazard entirely, distributables are not
packed/bundled/uglified, a drastically less complex build process, and CJS
consumers aren't shafted.
Each entry point (i.e. ENTRY
) in package.json
's
exports[ENTRY]
object includes one or more export
conditions. These entries may or may not include: an
exports[ENTRY].types
condition pointing to a type
declarations file for TypeScript and IDEs, an
exports[ENTRY].module
condition pointing to
(usually ESM) source for Webpack/Rollup, an exports[ENTRY].node
condition
pointing to (usually CJS2) source for Node.js require
and import
, an
exports[ENTRY].default
condition pointing to source for browsers and other
environments, and other conditions not enumerated
here. Check the package.json file to see which export
conditions are supported.
Though package.json
includes
{ "type": "commonjs" }
, note that any ESM-only entry points will
be ES module (.mjs
) files. Finally, package.json
also
includes the sideEffects
key, which is false
for
optimal tree shaking where appropriate.
See LICENSE.
New issues and pull requests are always welcome and greatly appreciated! 🤩 Just as well, you can star 🌟 this project to let me know you found it useful! ✊🏿 Or you could buy me a beer 🥺 Thank you!
See CONTRIBUTING.md and SUPPORT.md for more information.
Thanks goes to these wonderful people (emoji key):
Bernard 🚇 💻 📖 🚧 |
||||||
Add your contributions |
This project follows the all-contributors specification. Contributions of any kind welcome!