0 Tage Serie
javascript / expert
Snippet

Benutzerdefinierte ESM-Loader für Laufzeit-Modulinstrumentierung

Node.js ermöglicht die Anpassung der ES-Modulauflösung und des Ladevorgangs über Loader-Hooks. Dies ermöglicht On-the-fly-Transformationen (wie TypeScript-Kompilierung) oder Sicherheits-Sandboxing, indem jede 'import'-Anweisung in der Anwendung abgefangen wird.

snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
// loader.mjs
export async function load(url, context, nextLoad) {
const result = await nextLoad(url, context);
if (url.endsWith('.ts')) {
return {
format: 'module',
shortCircuit: true,
source: transformCode(result.source)
};
}
return result;
}
nodejs
Erklärung
1
export async function load(url, context, nextLoad)
Der Hook, der von Node.js aufgerufen wird, wenn ein Modul in die Quelle geladen werden muss.
2
const result = await nextLoad(url, context);
Ruft den Standard-Loader oder den nächsten Hook auf, um die Rohquelle zu erhalten.
3
shortCircuit: true,
Informiert Node.js, dass dieser Hook die Anfrage bearbeitet hat und keine weiteren Hooks nötig sind.
4
source: transformCode(result.source)
Wendet benutzerdefinierte Logik auf den Quellcode an, bevor dieser von V8 geparst wird.