What is tiny-warning?
The tiny-warning npm package is a utility for conditionally displaying warning messages in development environments. It is designed to be small and efficient, making it suitable for use in production code without significantly impacting the bundle size. The package is typically used to warn developers about potential issues or misuse of APIs without throwing actual errors in the console.
What are tiny-warning's main functionalities?
Conditional warnings
This feature allows developers to display warning messages conditionally based on a boolean expression. The warning will only be shown if the condition evaluates to true. This is useful for alerting developers of potential issues during development without affecting the production environment.
import warning from 'tiny-warning';
const isProduction = process.env.NODE_ENV === 'production';
const shouldWarn = !isProduction && someCondition;
warning(shouldWarn, 'This is a warning message that will only appear if someCondition is true and it is not a production build.');
Other packages similar to tiny-warning
warning
The 'warning' package is similar to 'tiny-warning' and serves the same purpose of logging warning messages to the console under certain conditions. It is slightly larger in size compared to 'tiny-warning' but offers a very similar API and functionality.
prop-types
While 'prop-types' is primarily used for type checking React component props, it also provides warning messages in development if the types do not match the expected types. It is different from 'tiny-warning' in that it is more specialized for React and includes type validation, but it shares the concept of development-only warnings.
invariant
The 'invariant' package is used to assert that a condition is met, and if not, it will throw an error in both development and production. It is different from 'tiny-warning' which only logs warnings and does not throw. 'Invariant' is more suitable for critical conditions that should halt execution if not met.
tiny-warning 🔬⚠️
A tiny warning
alternative.
import warning from 'tiny-warning';
warning(truthyValue, 'This should not log a warning');
warning(falsyValue, 'This should log a warning');
API: (condition: mixed, message: string) => void
condition
is required and can be anythingmessage
is an required string that will be passed onto console.warn
Why tiny-warning
?
The library: warning
supports passing in arguments to the warning
function in a sprintf style (condition, format, a, b, c, d, e, f)
. It has internal logic to execute the sprintf substitutions. tiny-warning
has dropped all of the sprintf logic. tiny-warning
allows you to pass a single string message. With template literals there is really no need for a custom message formatter to be built into the library. If you need a multi part message you can just do this: warning(condition, 'Hello, ${name} - how are you today?')
Dropping your warning
for kb savings!
We recommend using babel-plugin-dev-expression
to remove warning
calls from your production build. This saves you kb's as well as avoids logging warnings to the console for production.
What it does it turn your code that looks like this:
warning(condition, 'My cool message that takes up a lot of kbs');
Into this
if ('production' !== process.env.NODE_ENV) {
warning(condition, 'My cool message that takes up a lot of kbs');
}
Your bundler can then drop the code in the "production" !== process.env.NODE_ENV
block for your production builds
Final result:
For rollup
use rollup-plugin-replace and set NODE_ENV
to production
and then rollup
will treeshake out the unused code
Webpack
instructions
Builds
- We have a
es
(EcmaScript module) build (because you know you want to deduplicate this super heavy library) - We have a
cjs
(CommonJS) build - We have a
umd
(Universal module definition) build in case you needed it
We expect process.env.NODE_ENV
to be available at module compilation. We cache this value
That's it!
🤘