JS Module Namespace
The Module Namespace Object
When you use the syntax:
import * as name from "module";
JavaScript creates a module namespace object.
This is an immutable object that contains all the exported bindings from that module.
Example
The math module namespace object bundles all the exports (PI, add, multiply):
// math_module.js
export const PI = 3.14159;
export function add(a, b) {
return a + b;
}
export function multiply(a, b) {
return a * b;
}
export const PI = 3.14159;
export function add(a, b) {
return a + b;
}
export function multiply(a, b) {
return a * b;
}
Import math_module.js into a namespace object:
import * as math from "./math_module.js";
// Now you can use the math namespace object:
let myPi = math.PI
let result1 = math.add(2, 3));
let result2 = math.multiply(2, 3));
// Now you can use the math namespace object:
let myPi = math.PI
let result1 = math.add(2, 3));
let result2 = math.multiply(2, 3));
Module Namespace Support
Module namespace support refers to the mechanism that allows you to import all exports from a module into a single namespace object.
The Module Namespace feature is a part of the ES Modules introduced in ECMAScript 2015 to help organize and access modules in a consistent way.
Module Namespace Features
| Feature | Description |
|---|---|
| Namespace | A special object containing all exports from a module |
| Syntax | import * as name from module |
| Purpose | Organize, access, and reference module exports safely |
| Read Only | You can access exports but not reassign them |
| Live Binding | If an exported value changes in the module, the namespace reflects that change automatically |
| Enumerable | Its properties are enumerable and correspond to named exports |
| Prototype | The namespace is a plain object with no prototype (Object.getPrototypeOf(math) === null). |
Related Syntax
import { add } from "./math_module.js";
import math from "./math_module.js";
import * as math from "./math_module.js";