镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

Update export styles for ESM compatibility - #997

Open
joshkel wants to merge 1 commit into
auth0:masterfrom
joshkel:esm-compatible-exports
Open

joshkel wants to merge 1 commit into
auth0:masterfrom
joshkel:esm-compatible-exports

Conversation

@joshkel

@joshkel joshkel commented Aug 8, 2025

Copy link
Copy Markdown

Description

Node.js's ESM-to-CJS interoperability only supports a limited subset of exports. (See cjs-module-lexer for details.) By switching to one of the supported styles, ESM code can use named imports from jsonwebtoken.

References

This issue is further documented as the "Named Exports" error on Are the Types Wrong.

Fixes #963, #875

Testing

To demonstrate, create a test.mjs:

// Within the jsonwebtoken directory:
import { verify } from './index.js';
// Or importing from an installed jsonwebtoken package:
import { verify } from 'jsonwebtoken';
verify('a', 'a');

Without this change:

import { verify } from './index.js';
         ^^^^^^
SyntaxError: Named export 'verify' not found. The requested module './index.js' is a CommonJS module, which may not support all module.exports as named exports.
CommonJS modules can always be imported via the default export, for example using:

With this change: Successful execution (in this case, a "jwt malformed" error).

Tested in Node.js 24.4.1

Checklist

  • I have added documentation for new/changed functionality in this PR or in auth0.com/docs
  • All active GitHub checks for tests, formatting, and security are passing
  • The correct base branch is being used, if not the default branch

Node.js's ESM-to-CJS interoperability only supports a limited subset of exports.  (See [cjs-module-lexer](https://github.com/nodejs/cjs-module-lexer/blob/main/README.md) for details.)  By switching to one of the supported styles, ESM code can use named imports from jsonwebtoken.

To demonstrate, create a `test.mjs`:

```js
// Within the jsonwebtoken directory:
import { verify } from './index.js';
// Or importing from an installed jsonwebtoken package:
import { verify } from 'jsonwebtoken';
verify('a', 'a');
```

Without this change:

```
import { verify } from './index.js';
         ^^^^^^
SyntaxError: Named export 'verify' not found. The requested module './index.js' is a CommonJS module, which may not support all module.exports as named exports.
CommonJS modules can always be imported via the default export, for example using:
```

With this change: Successful execution (in this case, a "jwt malformed" error).

This issue is further documented as the ["Named Exports"](https://github.com/arethetypeswrong/arethetypeswrong.github.io/blob/main/docs/problems/NamedExports.md) error on [Are the Types Wrong](https://arethetypeswrong.github.io/?p=jsonwebtoken%409.0.2).

Fixes auth0#963, auth0#875
@squirly

squirly commented Mar 12, 2026

Copy link
Copy Markdown

I tested this patch in my codebase and it fixes imports for this library when using ESM.

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

Successfully merging this pull request may close these issues.

import jsonwebtoken throws error

2 participants