Attempting to use require() instead of import in ES module

Loading

Using require() in ES Modules

The error occurs because you’re trying to use CommonJS require() syntax in a file that’s treated as an ES module (typically indicated by "type": "module" in your package.json or using .mjs extension).

Solutions

Option 1: Switch to ES Module imports (recommended)

// Change this:
const module = require('module-name');

// To this:
import module from 'module-name';
// or for named exports:
import { namedExport } from 'module-name';

Option 2: Convert your project to CommonJS

  1. Remove "type": "module" from package.json (or set to "commonjs")
  2. Change file extensions from .mjs to .cjs if needed

Option 3: Dynamic import (for async requires)

// Instead of:
const module = require('module-name');

// Use:
const module = await import('module-name');
// Then access default export with .default:
const thing = module.default;
// Or named exports:
const { namedThing } = module;

Option 4: Create compatibility layer (not recommended)

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

// Now you can use require
const module = require('module-name');

Key Differences

FeatureES Modules (import)CommonJS (require)
SyntaxStatic (analyzed at compile)Dynamic (runtime)
LoadingAsynchronousSynchronous
File extension.mjs or type:module.js/.cjs or default
Node supportv12+All versions

Best Practice

  • New projects should use ES Modules (import/export)
  • If working with older code, either:
  • Convert to ES Modules gradually
  • Use .cjs extension for CommonJS files
  • Use dynamic imports when needed

Example Conversion

Before (CommonJS):

const fs = require('fs');
const { readFile } = require('fs').promises;
module.exports = { myFunction };

After (ES Modules):

import fs from 'fs';
import { promises } from 'fs';
const { readFile } = promises;
export { myFunction };
// or export default myFunction;

Leave a Reply

Your email address will not be published. Required fields are marked *