Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Exported as .default in CJS build #60

Open
overlookmotel opened this issue Apr 7, 2020 · 4 comments
Open

Exported as .default in CJS build #60

overlookmotel opened this issue Apr 7, 2020 · 4 comments

Comments

@overlookmotel
Copy link

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.

@thanpolas
Copy link

hello? anyone home?

@overlookmotel
Copy link
Author

@thanpolas I published an alternative simple-invariant designed for use in NodeJS from CommonJS (although importing from ESM works fine too).

@pkerschbaum
Copy link
Contributor

pkerschbaum commented Sep 28, 2022

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?

@alexreardon
Copy link
Owner

Thanks for looking into this @pkerschbaum!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants