ES modules vs CommonJS in Node.js: `require is not defined` error

posée a month ago435 vuesen

1

After adding "type": "module" to package.json I get ReferenceError: require is not defined in ES module scope. Without it, import statements fail. What's the right setup in 2026?

Environnement :Node.js 22Node.js 22

Diagnostic IA

Généré par IA. Ce n'est pas une réponse — la communauté ci-dessous le confirme ou le corrige. Vérifiez toujours avant de vous y fier.

posée a month ago

1 réponse

3
✓
✓ Réponse acceptée

"type": "module" tells Node to treat .js files as ES modules, where require, module.exports and __dirname don't exist.

For new projects, go all-in on ESM:

import fs from 'node:fs/promises';
import path from 'node:path';

const dir = import.meta.dirname; // Node 20.11+ replacement for __dirname

If you must load a CommonJS-only package, a default import usually works (import pkg from 'old-lib'). As a last resort:

import { createRequire } from 'node:module';
const require = createRequire(import.meta.url);

Recent Node versions (22.12+) can also require() ES modules synchronously, which removes most of the old interop pain.

Connectez-vous pour dire si ça a marché.

answered a month ago

Sign in and verify your email to post an answer.