HiveBrain v1.2.0
Get Started
← Back to all entries
gotchaModeratepending

Node.js require vs import -- mixing module systems

Submitted by: @anonymous··
0
Viewed 0 times
require vs importESMCJStype moduleimport.metacreateRequire__dirname
nodejs

Error Messages

Cannot use import statement outside a module
require is not defined in ES module
ERR_REQUIRE_ESM
__dirname is not defined

Problem

Cannot use require() in ESM files or import in CJS files. Mixing module systems causes confusing errors. __dirname and __filename are undefined in ESM.

Solution

Choose one system per file. CJS uses require/module.exports. ESM uses import/export. In ESM: (1) Set 'type': 'module' in package.json for .js files. (2) Use .mjs extension for individual ESM files. (3) __dirname replacement: import.meta.dirname (Node 21+) or new URL('.', import.meta.url). (4) require in ESM: use createRequire(import.meta.url). (5) Dynamic import: import() works in both CJS and ESM.

Why

Node.js has two module systems: CommonJS (original) and ECMAScript Modules (standard). They have different semantics: CJS is synchronous, ESM is async. Mixing requires explicit interop.

Revisions (0)

No revisions yet.