xcraft-server est un module de démarrage autonome (standalone) pour le framework Xcraft. Il orchestre l'initialisation de l'environnement de configuration, la création des répertoires nécessaires, la génération des fichiers de configuration via xcraft-core-etc, puis lance le serveur Xcraft principal via xcraft-core-server. Il constitue le point d'entrée principal pour déployer une application Xcraft en mode serveur indépendant.
- Structure du module
- Fonctionnement global
- Exemples d'utilisation
- Interactions avec d'autres modules
- Variables d'environnement
- Détails des sources
- Licence
Le module est composé de deux fichiers principaux situés dans lib/ :
server.js— Point d'entrée public du module (défini dansmain). Initialise optionnellement l'environnement, exécute un callback post-initialisation, puis démarre le serveur Xcraft.init-env.js— Responsable de la préparation complète de l'environnement : création des répertoires, génération des configurations initiales et positionnement des variables d'environnement.
Le démarrage du serveur suit une séquence précise :
server.js
│
├── [si !skipEnv] → init-env.js
│ ├── Positionne les variables d'environnement (XCRAFT_ROOT, XCRAFT_ATTACH, XCRAFT_LOGS)
│ └── initEtc()
│ ├── Crée l'arborescence de répertoires (etc/, var/, var/run/)
│ ├── Écrit le fichier de configuration xcraft principal (etc/xcraft/config.json)
│ ├── [si !initialized] → Etc.createAll() pour xcraft-core-*, xcraft-contrib-*, goblin-*
│ └── Marque l'initialisation dans var/.xcraft-server-initialized
│
├── [si afterInit] → callback afterInit()
│
└── xcraft-core-server.runAsLib()
L'initialisation complète des configurations (Etc.createAll) n'est exécutée qu'une seule fois. Un fichier sentinelle var/.xcraft-server-initialized est utilisé pour vérifier si l'initialisation a déjà eu lieu. Ce fichier stocke la date de dernière modification (mtime) du fichier etc/xcraft/config.json ; si cette date correspond encore à la version actuelle du fichier de configuration, l'initialisation complète est ignorée lors des redémarrages.
Si un fichier config.js est présent à la racine du projet, il est automatiquement détecté et utilisé comme overrider pour personnaliser la configuration générée par xcraft-core-etc. Un second overrider additionnel peut également être fourni via le paramètre overrider.
const xcraft = require('xcraft-server');
xcraft(
'/var/myapp/config', // configPath : répertoire racine de configuration
'/opt/myapp' // projectPath : répertoire du projet (contenant node_modules)
);const xcraft = require('xcraft-server');
xcraft('/var/myapp/config', '/opt/myapp', () => {
console.log('Environnement initialisé, serveur en cours de démarrage...');
});Utile lorsque l'environnement est déjà configuré manuellement (variables d'environnement positionnées en amont) :
const xcraft = require('xcraft-server');
xcraft(
'/var/myapp/config',
'/opt/myapp',
null,
true // skipEnv = true
);Permet d'initialiser uniquement la structure de configuration sans démarrer le serveur, utile pour des scripts de préparation ou de migration :
const {initEtc} = require('xcraft-server/lib/init-env.js');
initEtc(
'/var/myapp/config', // configPath
'/opt/myapp', // projectPath
'my-app-id', // appId (optionnel, par défaut xcraft-core-host.appId)
'/opt/myapp/overrides/custom.js' // overrider supplémentaire (optionnel)
);- xcraft-core-server : Lance le serveur Xcraft principal via
runAsLib() - xcraft-core-etc : Génère les fichiers de configuration pour tous les modules détectés dans
node_modules(filtresxcraft-core-*,xcraft-contrib-*,goblin-*) - xcraft-core-host : Fournit l'identifiant d'application (
appId) par défaut lorsqu'il n'est pas explicitement spécifié - xcraft-core-log : Système de journalisation utilisé en interne par
xcraft-core-server fs-extra: Manipulation du système de fichiers (création de répertoires, lecture/écriture JSON)
| Variable | Description | Exemple | Valeur par défaut |
|---|---|---|---|
XCRAFT_ROOT |
Chemin racine de la configuration Xcraft (défini sur configPath) |
/var/myapp/config |
(obligatoire) |
XCRAFT_ATTACH |
Désactivé lors de l'initialisation autonome (mode standalone) | 0 |
0 |
XCRAFT_LOGS |
Active la journalisation console | 1 |
1 |
PATH |
Utilisé pour peupler le champ path dans etc/xcraft/config.json |
(système) | (système) |
Point d'entrée public du module (main dans package.json). Exporte une fonction unique qui orchestre le démarrage complet du serveur. Lance une erreur explicite si configPath ou projectPath ne sont pas fournis.
module.exports(configPath, projectPath, afterInit=null, skipEnv=false)— Initialise l'environnement (sauf siskipEnvesttrue), exécute le callback optionnelafterInit, puis démarre le serveur viaxcraft-core-server.runAsLib(). Lève une erreur siconfigPathouprojectPathne sont pas fournis.
Gère l'ensemble de la phase d'initialisation de l'environnement. Exporte la fonction principale d'initialisation ainsi que initEtc séparément pour une utilisation modulaire indépendante du démarrage du serveur.
-
module.exports(configPath, projectPath, appId=null, overrider=null)— Positionne les variables d'environnement (XCRAFT_ROOT=configPath,XCRAFT_ATTACH=0,XCRAFT_LOGS=1) puis délègue àinitEtc. -
module.exports.initEtc(configPath, projectPath, appId=null, overrider=null)— Crée l'arborescence de répertoires nécessaires (etc/,etc/xcraft/,var/,var/run/), génère le fichier de configuration Xcraft principal (etc/xcraft/config.jsonavecxcraftRoot,pkgTargetRootetpath), et déclenche la création de toutes les configurations de modules viaxcraft-core-etcsi l'initialisation n'a pas encore été effectuée. Détecte automatiquement un fichierconfig.jsà la racine deprojectPathet accepte unoverrideradditionnel.
Ce module est distribué sous licence MIT.
Ce contenu a été généré par IA