xPulse
🇩🇪 DE

Anleitung

Installation

npm install @xpulse/config --registry=https://npm.xpulse.one

Quickstart

import config from '@xpulse/config';
await config.load();
console.log(config.name); // 'xpulse-web'
console.log(config.get('http.port')); // '3000'

Was passiert beim Laden?

config.load() führt folgende Schritte in dieser Reihenfolge aus:

  1. dotenv.load() – lädt .env + .env.{NODE_ENV} ins process.env
  2. xpulse.json lesen und parsen
  3. name validieren – Error wenn nicht gesetzt
  4. Fallbacks einsetzen – fehlende Standard-Keys werden mit Defaults befüllt
  5. ${VAR} auflösen – alle Referenzen auf process.env Werte werden ersetzt
  6. config:loaded feuern

xpulse.json anlegen

Jedes Projekt braucht eine xpulse.json im Repo-Root:

{
"name": "xpulse-web",
"type": "tool"
}

name ist Pflicht – alle anderen Keys sind optional und haben Fallbacks.

${ENV_VAR} Referenzen

Werte in xpulse.json können auf .env Variablen referenzieren:

{
"name": "xpulse-web",
"type": "tool",
"http": {
"port": "${PORT}"
},
"sources": {
"chat": {
"url": "${CHAT_URL}"
}
}
}
# .env
PORT=3000
CHAT_URL=https://chat.xpulse.one
await config.load();
config.get('http.port') // '3000'
config.get('sources.chat.url') // 'https://chat.xpulse.one'

Nicht auflösbare Variablen bleiben als ${VAR} stehen und erzeugen eine Warnung.

Custom Keys

xpulse.json ist ein offenes Schema – eigene Keys sind erlaubt und werden ohne Warnung durchgereicht:

{
"name": "xpulse-chat",
"type": "tool",
"release": {
"current": "1.3.0",
"codename": "Abomasnow"
}
}
config.get('release.current') // '1.3.0'
config.get('release.codename') // 'Abomasnow'

Events

Nach config.load() wird config:loaded via @xpulse/event emittiert. dotenv:loaded wird kurz davor von @xpulse/dotenv gefeuert.

import event from '@xpulse/event';
event.on('config:loaded', ({ name, type, env, files }) => {
console.log(`${name} (${type}) geladen – ENV: ${env}`);
});
await config.load();

Expliziter Pfad

// xpulse.json aus anderem Verzeichnis laden
await config.load({ path: '/app' });
// Bestimmtes Environment erzwingen
await config.load({ env: 'stage' });
de/guide.md 2026-03-13