Bird
Raised Fist0
Node.jsframework~5 mins

CommonJS require and module.exports in Node.js - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What does require() do in CommonJS?

require() loads and runs a module file, returning the exported values from that module.

Click to reveal answer
beginner
How do you export a single function or object in CommonJS?

You assign it to module.exports. For example: module.exports = myFunction;

Click to reveal answer
intermediate
What is the difference between exports and module.exports?

exports is a shortcut to module.exports. Reassigning exports breaks the link, so only module.exports controls what is exported.

Click to reveal answer
beginner
Can you require a JSON file using require() in CommonJS?

Yes, require() can load JSON files and returns the parsed object.

Click to reveal answer
intermediate
What happens if you call require() multiple times for the same module?

The module is loaded once and cached. Subsequent require() calls return the cached exports, not re-running the module code.

Click to reveal answer
Which statement correctly exports a function named sayHello in CommonJS?
Aexports = sayHello;
Bmodule.exports = sayHello;
Cexport default sayHello;
Drequire('sayHello');
What does require('./math') return if math.js uses module.exports = { add, subtract }?
AUndefined
BA string with the file path
CAn object with <code>add</code> and <code>subtract</code> functions
DA function named <code>math</code>
If you want to export multiple values, which is the best way in CommonJS?
AUse <code>require()</code> inside the module
BCall <code>exports = value1, value2</code>
CUse <code>export { value1, value2 }</code>
DAssign an object to <code>module.exports</code> with all values
What happens if you do exports = { a: 1 } instead of module.exports = { a: 1 }?
AThe module exports remain unchanged (empty object)
BThe module exports the object { a: 1 }
CAn error is thrown
DThe module exports a function
How does CommonJS handle circular dependencies between modules?
AIt returns a partially loaded module object during the cycle
BIt throws an error immediately
CIt ignores the second require call
DIt reloads the module twice
Explain how require() and module.exports work together in CommonJS modules.
Think about how you share code between files.
You got /4 concepts.
    Describe the difference between exports and module.exports and why it matters.
    Consider what happens if you assign a new object to exports.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does module.exports do in a Node.js file?
      easy
      A. It deletes the current module from memory.
      B. It imports code from another module.
      C. It runs the module as a standalone program.
      D. It defines what the module shares when required by another file.

      Solution

      1. Step 1: Understand module.exports role

        module.exports sets the object or value that other files receive when they use require() on this module.
      2. Step 2: Differentiate from require()

        require() is used to import, while module.exports is used to export code from a module.
      3. Final Answer:

        It defines what the module shares when required by another file. -> Option D
      4. Quick Check:

        module.exports = export code [OK]
      Hint: Remember: module.exports shares, require() imports [OK]
      Common Mistakes:
      • Confusing require() with module.exports
      • Thinking module.exports runs code
      • Assuming module.exports deletes modules
      2. Which of the following is the correct syntax to import a local module named utils.js using CommonJS?
      easy
      A. const utils = require('./utils');
      B. const utils = require('utils');
      C. import utils from './utils';
      D. const utils = import('./utils');

      Solution

      1. Step 1: Identify local module import syntax

        Local files require a relative path starting with './' or '../' in require().
      2. Step 2: Check each option

        const utils = require('./utils'); uses require('./utils'), which correctly imports the local utils.js file. const utils = require('utils'); misses './', so it looks for a package. import utils from './utils'; uses ES module syntax, not CommonJS. const utils = import('./utils'); uses dynamic import, not CommonJS.
      3. Final Answer:

        const utils = require('./utils'); -> Option A
      4. Quick Check:

        Local modules need './' in require() [OK]
      Hint: Use './' prefix for local files in require() [OK]
      Common Mistakes:
      • Omitting './' for local modules
      • Using ES module import syntax in CommonJS
      • Using import() instead of require()
      3. Given the following two files, what will be logged when node app.js runs?

      // math.js
      module.exports.add = (a, b) => a + b;
      module.exports.sub = (a, b) => a - b;
      
      // app.js
      const math = require('./math');
      console.log(math.add(5, 3));
      console.log(math.sub(5, 3));
      medium
      A. undefined and undefined
      B. 8 and 2
      C. Error: add is not a function
      D. 5 and 3

      Solution

      1. Step 1: Understand exports in math.js

        math.js exports two functions: add and sub, which add and subtract two numbers.
      2. Step 2: Trace app.js calls

        app.js requires math.js and calls math.add(5, 3) which returns 8, and math.sub(5, 3) which returns 2.
      3. Final Answer:

        8 and 2 -> Option B
      4. Quick Check:

        5+3=8 and 5-3=2 [OK]
      Hint: Check exported function names and call with correct args [OK]
      Common Mistakes:
      • Expecting undefined because of wrong export syntax
      • Confusing module.exports with exports shorthand
      • Forgetting to require the module
      4. What is the error in the following code snippet?

      // greet.js
      exports = function() { return 'Hello'; };
      
      // app.js
      const greet = require('./greet');
      console.log(greet());
      medium
      A. Cannot find module './greet'.
      B. SyntaxError due to missing module.exports.
      C. greet is not a function because exports was overwritten incorrectly.
      D. No error; it logs 'Hello'.

      Solution

      1. Step 1: Analyze exports assignment in greet.js

        Assigning directly to exports replaces the local exports variable but does not change module.exports, so require() gets an empty object.
      2. Step 2: Understand require() result in app.js

        Since module.exports was not changed, greet is an empty object, not a function, so calling greet() causes an error.
      3. Final Answer:

        greet is not a function because exports was overwritten incorrectly. -> Option C
      4. Quick Check:

        Overwrite exports breaks module.exports [OK]
      Hint: Always assign to module.exports, not exports directly [OK]
      Common Mistakes:
      • Assigning function directly to exports instead of module.exports
      • Expecting exports and module.exports to be the same after reassignment
      • Ignoring that require() returns module.exports
      5. You want to export a single class from a module so that requiring it returns the class directly. Which is the correct way to do this in CommonJS?

      class User {
        constructor(name) {
          this.name = name;
        }
      }
      
      // What should you write here?
      hard
      A. module.exports = User;
      B. exports.User = User;
      C. module.exports.User = User;
      D. export default User;

      Solution

      1. Step 1: Understand exporting a single value

        To export a single class so require() returns it directly, assign it to module.exports.
      2. Step 2: Compare options

        module.exports = User; assigns User directly to module.exports, so require('./module') returns the class. module.exports.User = User; and exports.User = User; export an object with User property, so require() returns an object, not the class itself. export default User; uses ES module syntax, invalid in CommonJS.
      3. Final Answer:

        module.exports = User; -> Option A
      4. Quick Check:

        Single export = module.exports = value [OK]
      Hint: Assign single export directly to module.exports [OK]
      Common Mistakes:
      • Using exports.User instead of module.exports for single export
      • Mixing ES module syntax with CommonJS
      • Expecting require() to return class when exporting as property