tiny-invariant
tiny-invariant copied to clipboard
Exported as `.default` in CJS build
At present when requiring this library from CJS code (e.g. in Node), require('tiny-invariant')
returns an object and you have to access the function from the .default
property.
const invariant = require('tiny-invariant').default;
I know the purpose of this module is primarily for client-side code as then it can be effectively minimised in production builds. However, I like it so much, I now use it everywhere including pure Node.js code!
Would you consider reconfiguring the CJS builds so require('tiny-invariant')
returns the actual invariant
function?
To avoid breaking changes, it'd be possible to also export invariant as property .default
of itself e.g.:
// Compiled CJS build
function invariant(condition, message) { /* ... */ }
invariant.default = invariant;
module.exports = invariant;
Or, to also issue a deprecation warning:
const warning = require('tiny-warning');
Object.defineProperty(invariant, 'default', {
get() {
warning(
false,
'Accessing `invariant` as `require('tiny-invariant').default` is deprecated.\n'
+ "Use `require('tiny-invariant')` (without `.default` instead)."
);
return invariant;
}
});
How do you feel about this?
I'd be happy to submit a PR.
hello? anyone home?
@thanpolas I published an alternative simple-invariant designed for use in NodeJS from CommonJS (although importing from ESM works fine too).
I cannot reproduce this issue, see https://stackblitz.com/edit/node-znq7it:
❯ npm run test
$ node ./lib/test.js
console.log after successful invariant usage!
Maybe some change since this issue was opened fixed the issue?
Thanks for looking into this @pkerschbaum!