CommonJs (NodeJs) - Require


The import functionality implementation of commonjs (and then node) is done via the require function

require basically:

It is the built-in statement from the commonjs module format to load module.

Require vs Import

require permits to load CommonJs Module whereas the import statement permits to load ESM module

Node.js follows by default the commonJs format, if you want to use import, you need to:

Syntax and High-level algorithm of require in Node

If the code is run directly on Node without any other tool, the require node function is used to resolve (find) the dependency.

The below require statement called from a module located at path Y



Require will resolve the module location with the following algo:

  • 1. If X is a core module,
  • 2. If X begins with /
    • a. set Y to be the filesystem root
  • 3. If X begins with ./ or / or ../, it indicates:
  • 4. otherwise try to load from a node_modules folder.: LOAD_NODE_MODULES(X, dirname(Y))
  • 5. THROW “not found”

More .. see high-level algorithm in pseudocode of what require.resolve() does

Dependency Cycle

Module File Extension

If the exact filename is not found, then Node.js will attempt to load the required filename with the added extensions:

  • .js (interpreted as JavaScript text files)
  • .json (parsed as JSON text files)
  • and finally .node. (interpreted as compiled addon modules loaded with dlopen)


Node Module

Local Package installed with Javascript - npm (Node package manager)

var demo=require('package-name');


Project Module

const { PI } = Math;

exports.area = (r) => PI * r ** 2;

exports.circumference = (r) => 2 * PI * r;
  • The client of the modules> By giving the path, node know that it's a project module
//  loads the module circle.js that is in the same directory as foo.js.
const circle = require('./circle.js');
console.log(`The area of a circle of radius 4 is ${circle.area(4)}`);

Powered by ComboStrap