Understanding and Resolving “Module Not Found” and Related Errors in Node.js Development
Encountering errors like “ERR_MODULE_NOT_FOUND” or “ERR_REQUIRE_ESM” can be frustrating for Node.js developers. These errors typically signal issues with how your project is structured, how modules are being imported, or compatibility between different module systems. This article provides a comprehensive guide to understanding these errors, their common causes, and effective solutions, as of February 2, 2026.
What Causes ”ERR_MODULE_NOT_FOUND”?
The “ERR_MODULE_NOT_FOUND” error, as the name suggests, occurs when Node.js cannot locate a module that your code is trying to import. This can stem from several reasons:
- Typos in Import Statements: A simple misspelling in the module name within your
require()orimportstatement is a frequent culprit. - Incorrect Module Path: The path specified to the module is incorrect, either relative to your current file or an absolute path that doesn’t exist.
- Module Not Installed: The module hasn’t been installed using npm or yarn.
- Case Sensitivity: File systems on Linux and macOS are case-sensitive. “MyModule” is different from “mymodule.”
- ES Module vs. CommonJS Compatibility: Mixing ES module (
import/export) and CommonJS (require()/module.exports) syntax can lead to resolution issues, especially in older Node.js versions.
“ERR_REQUIRE_ESM”: Requiring ES Modules in CommonJS
The “ERR_REQUIRE_ESM” error specifically arises when you attempt to use require() to import an ES module. Node.js has increasingly adopted ES modules as the standard, but older codebases often rely on CommonJS. Directly using require() on an ES module is not supported [[2]].
Resolving “ERR_MODULE_NOT_FOUND” and “ERR_REQUIRE_ESM”
Here’s a breakdown of solutions, categorized by the likely cause:
1. Verify Module Installation
Ensure the module is installed in your project’s node_modules directory. Run the following command in your terminal:
npm install
If you’re using yarn:
yarn install
2. Double-Check Import Statements
carefully review your require() or import statements for typos. Pay attention to capitalization and ensure the path to the module is correct.
3. Addressing ES Module/CommonJS Conflicts
This is often the most complex issue. Several approaches can be taken:
- Convert to ES Modules: The most future-proof solution is to migrate your entire project to use ES modules. This involves changing
require()toimportandmodule.exportstoexport. Though,this can be a significant undertaking. - Use Dynamic Imports: For isolated cases where you need to import an ES module from CommonJS, use dynamic imports:
async function loadESModule() {
const module = await import('./your-es-module.mjs');
// Use the module
}
loadESModule();
Note the use of await as dynamic imports are asynchronous.
tsconfig.json file can help resolve module resolution issues. Specifically, the "moduleResolution" option can be set to "node" or "bundler" depending on your project setup. [[1]]. Be aware that changing this setting can have broader implications for your project’s compilation.4. check File System Case Sensitivity
If you’re developing on