Skip to content
Latchkey

Jest "SyntaxError: Cannot use import statement outside a module"

Jest hit raw ESM import syntax it did not transform to CommonJS. Usually a dependency ships ESM-only and Jest’s default transformIgnorePatterns skips node_modules, so it is never compiled.

What this error means

A test fails to parse with "SyntaxError: Cannot use import statement outside a module," pointing at a file inside node_modules (an ESM-only package) or at your own untransformed source.

Jest output
Details:

/app/node_modules/nanoid/index.js:1
({"Object.<anonymous>":function(...){export { nanoid } from './...';
                                       ^^^^^^
SyntaxError: Cannot use import statement outside a module

Common causes

ESM-only dependency not transformed

Jest ignores node_modules by default. An ESM-only package (e.g. nanoid, uuid v9) is loaded as-is, and its import syntax breaks under CommonJS.

No transform configured for your syntax

Without babel-jest/ts-jest set up, Jest cannot compile your own import/TSX either, producing the same SyntaxError on source files.

How to fix it

Allow-list the ESM package for transform

Carve the ESM dependency out of transformIgnorePatterns so Jest compiles it.

jest.config.js
// jest.config.js
module.exports = {
  transformIgnorePatterns: ['/node_modules/(?!(nanoid|uuid)/)'],
};

Configure a transform for your code

  1. Add babel-jest with @babel/preset-env (and preset-typescript/preset-react as needed).
  2. Or use ts-jest for TypeScript projects.
  3. Confirm the transform glob covers your source extensions.

How to prevent it

  • Keep transformIgnorePatterns updated as ESM-only deps are added.
  • Standardize on babel-jest or ts-jest for your stack.
  • Consider Vitest for projects that are ESM-first.

Frequently asked questions

What causes ""Cannot use import statement""?
Jest ignores node_modules by default. An ESM-only package (e.g. nanoid, uuid v9) is loaded as-is, and its import syntax breaks under CommonJS.
How do I fix "Cannot use import statement"?
Carve the ESM dependency out of transformIgnorePatterns so Jest compiles it.

Related guides

References

Latchkey auto-heals failures like this one - detected, fixed, and retried without you. Start free → 30-day trial · No credit card