How to use JavaScript modules

Export and import names

Named exports make dependencies visible. Relative module specifiers include ./ and commonly include the file extension.

// math.js
export function add(a, b) {
  return a + b;
}
export const PI = 3.14159;

// app.js
import { add, PI } from "./math.js";
console.log(add(2, 3), PI);

Run modules in a browser

Use type="module". Modules are deferred and strict automatically; serve files over HTTP because direct file URLs may be restricted.

<script type="module" src="./app.js"></script>

<!-- One simple local server option: -->
<!-- python3 -m http.server 8000 -->

Run ES modules in Node.js

Use the .mjs extension, or set "type": "module" in package.json for .js files.

// package.json
{
  "type": "module"
}

// Then run:
// node app.js

Design useful modules

  • Export a small public API and keep helpers private
  • Avoid circular imports between modules
  • Use default exports sparingly when a stable named export is clearer
  • Remember that browser imports use URLs while Node resolution also follows package rules