JavaScript-Module erlauben es, Code in kleine, wiederverwendbare Dateien zu gliedern. Es gibt verschiedene Standards:
- ES Modules (ESM) – offizieller Standard seit ES6, unterstützt
import/export. - CommonJS (CJS) – Standard in Node.js, verwendet
require()undmodule.exports. - AMD (Asynchronous Module Definition) – oft in Browsern vor ESM verwendet, unterstützt asynchrones Laden (
define()undrequire()).
Module kapseln Code (Variablen, Funktionen, Objekte oder Klassen), reduzieren globale Variablen und erhöhen die Wiederverwendbarkeit.
ESM (ES Modules):
ESM ist der moderne Standard im Browser und in NodeJS, unterstützt statische Analyse und Tree Shaking.
| Import | Export |
|---|---|
import { name } from './modul.js';import DefaultFunc from './modul.js'; | export const name = "Lisa";export default function() { … } |
Hinweise:
- im Browser müssen referenzierte Module das Attribut
typemit dem Wertmodulebekommen (<scripttype="module"src="module.js"></script>)
export default():
- ein Modul kann genau einen
default-Export haben - alles was als
defaultexportiert wird, kann beim Import direkt in eine Variable geladen werden - ESM-only
/* EXPORT in modul.js */
function greet() { console.log("Hi"); }
function farewell() { console.log("Bye"); }
export default {
greet,
farewell
};/* IMPORT in main.js */
import MyModule from './modul.js';
MyModule.greet(); // Hi
MyModule.farewell(); // Bye
oder:
/* EXPORT in modul.js */
export const fart = () => console.log("PfrrrrrrrrRRRrrRRtttzzzz");
export default function() { console.log("Default"); }
/* IMPORT in main.js */
import { fart } from './modul.js';
import defFunc from './modul.js';
fart(); // Hi
defFunc(); // Defaultnamed exports:
- exportiert Variablen, Funktionen, Objekte oder Klassen anhand ihres Namens aus dem Modul
- beim Import müssen exakt diese Namen genutzte werden
- Vorteile: mehrere Export pro Modul möglich + Tree Shaking (nur importierte Dinge landen im Bundle)
/* EXPORT in modul.js */
export const name = "Lisa";
export const age = 25;
export function greet() {
console.log(`Hi, ich heiße ${name}`);
}
export class User {
constructor(name) {
this.name = name;
}
}/* IMPORT in main.js */
import { name, User } from './modul.js';
import { greet as sayHello } from './modul.js'; // Alias-Import
console.log(name); // Lisa
sayHello(); // Hi, ich heiße Lisa
const user = new User("Tom");
console.log(user.name); // Tom
Kombinieren von default und named export:
- kann hilfreich sein, wenn z.B. eine primäre Funktionalität als default mit optionalen Erweiterungen bereitgestellt werden soll
/* EXPORT in modul.js */
export default function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a - b;
}
export const PI = 3.14159/* IMPORT in main.js */
import addFunction, { subtract, PI } from './math.js';
console.log(addFunction(2, 3)); // Outputs: 5
console.log(subtract(5, 2)); // Outputs: 3
console.log(PI); // Outputs: 3.14159
Re-Export:
- ermöglicht das Importieren aus Modulen, die nicht der Deklarationsort sind, sondern selber nur einen Import verwenden
/* EXPORT in modules/math.js */
export function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a - b;
}
// modules/geometry.js
export const PI = 3.14159;
export function calculateCircumference(radius) {
return 2 * PI * radius;
}
/* then RE-EXPORT in modules/index.js */
export { add, subtract } from './math.js';
export { PI, calculateCircumference } from './geometry.js';/* FINAL IMPORT in app.js */
import { add, subtract, PI, calculateCircumference } from './modules/index.js';
console.log(add(2, 3)); // Outputs: 5
console.log(subtract(5, 2)); // Outputs: 3
console.log(PI); // Outputs: 3.14159
console.log(calculateCircumference(10)); // Outputs: 62.8318
Common JS (CJS):
CJS ist synchron, Standard in Node.js, aber im Browser nur über Bundler nutzbar.
| Import | const mod = require('./modul'); |
| Export | module.exports = {...}exports.name = value; |
Beispiel:
// modul.js
exports.greet = () => console.log("Hi");
module.exports.default = function() { console.log("Default"); };
// main.js
const mod = require('./modul');
mod.greet(); // Hi
mod.default(); // DefaultAsynchronous Module Definition (AMD):
AMD lädt Module asynchron im Browser, wird heute meist durch ESM ersetzt.
| Import | require(['modul'], function(mod) { … }); |
| Export | define(function() {return {greet: function() {…} }; }); |
Beispiel:
// modul.js
define(function() {
return {
greet: function() { console.log("Hi"); }
};
});
// main.js
require(['modul'], function(mod) {
mod.greet(); // Hi
});