Skip to content

Exported as .default in CJS build #60

@overlookmotel

Description

@overlookmotel

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions