A Basic Guide to Node Modules: CJS, ESM, AMD, and UMD

There are 4 types of node modules:

  1. CJS(CommonJS)
  2. ESM(es6)
  3. AMD(Asynchronous Module Definition)
  4. UMD(Universal Module Definition)

Here’s a comparison of the 4 types of modules.

Feature umd cjs esm amd
Purpose Universal module format Server-side module format JavaScript standard module format Asynchronous module format
Supported environments Browser and Node.js Node.js Modern browsers and Node.js (>= 13) Browser
Syntax Defines a factory function Uses require and module.exports Uses import and export Uses define and require
Dynamic import No No Yes Yes
Asynchronous loading No No Yes Yes
Tree shaking No No Yes No
Dead code elimination No No Yes No
Native support No Yes (in Node.js) Yes (in modern browsers and Node.js) No
Interoperability High (works with AMD, CJS, and globals) Medium (works with ESM using import()) Medium (works with CJS using import()) Low (mainly works with other AMD modules)
Performance Medium Medium High Medium
Usage complexity Medium Low Low Medium
Popularity Medium High Growing popularity Declining popularity
cmd + /