@luilautre/jst
v1.1.4
Published
Serveur web avec préprocesseur de templates {{variables}} — compatible Node.js, Express et Vercel
Downloads
811
Maintainers
Readme
JST Server
Serveur web Node.js avec préprocesseur de templates {{variables}}.
Compatible local, Vercel et importable via npm.
Installation
npm install @luilautre/jstOu directement depuis GitHub :
npm install luilautre/jstUtilisation
1. Middleware sur app Express existante (recommandé)
Applique JST comme middleware sur ton serveur Express :
const express = require('express');
const path = require('path');
const { jstMiddleware } = require('@luilautre/jst');
const app = express();
// Applique JST sur tous les fichiers
app.use(jstMiddleware({
racine: path.resolve('./'), // variables.json, functions.js ici
public: path.join(path.resolve('./'), 'public'), // fichiers HTML/CSS/JS ici
page404: '404.html' // optionnel, défaut: '404.html'
}));
// Routes personnalisées (optionnel)
app.get('/api/hello', (req, res) => {
res.json({ message: 'Hello' });
});
app.listen(3000);Gestion automatique de la 404 : Si un fichier n'existe pas, JST cherche automatiquement 404.html dans le dossier public/ et l'affiche avec toutes les variables/fonctions JST. Personnalisable avec l'option page404.
JST traitera automatiquement tous les fichiers HTML/CSS/JS avant de les envoyer !
2. En ligne de commande (local)
npx jst # port 3000 par défaut
npx jst 8080 # port au choix3. App Express complète (legacy)
const path = require('path');
const { creerApp } = require('@luilautre/jst');
const app = creerApp({
racine: path.resolve('./'),
public: path.join(path.resolve('./'), 'public')
});
module.exports = app; // pour Vercel
if (require.main === module) {
app.listen(3000, () => console.log('Serveur sur http://localhost:3000'));
}Fonctionnement
À chaque requête, JST Server :
- Lit le fichier demandé dans le dossier
public/ - Remplace les
{{variables}}avec le contenu devariables.json - Remplace les
{{_constantes_}}internes (date, URL, heure...) - Appelle les
{{fonctions()}}déclarées dansfunctions.js - Injecte les
{{include: fichier}} - Envoie le résultat au client — aucun fichier généré sur le disque
variables.json
Définis tes variables globales dans un fichier variables.json à la racine :
{
"SiteTitle": "Mon Site",
"ThisURL": "https://monsite.com",
"SiteHeader": "<header><a href=\"{{ThisURL}}\">Accueil</a></header>",
"SiteFooter": "<footer>© 2025</footer>"
}Les variables peuvent s'imbriquer ({{ThisURL}} dans SiteHeader est résolu automatiquement).
Constantes internes
JST fournit des constantes automatiques utilisables dans tous les fichiers :
{{_thisURL_}} URL de la requête courante
{{_thisFile_}} Nom du fichier
{{_thisDir_}} Dossier du fichier
{{_host_}} Nom d'hôte
{{_protocol_}} http ou https
{{_method_}} GET, POST...
{{_ip_}} IP du visiteur
{{_date_}} Date (YYYY-MM-DD)
{{_time_}} Heure (HH:MM:SS)
{{_datetime_}} Date et heure ISO
{{_timestamp_}} Timestamp Unix
{{_year_}} Année
{{_month_}} Mois
{{_day_}} Jour
{{_weekday_}} Jour de la semaine (ex: Lundi)
{{_env_}} development ou production
{{_jstVersion_}} Version de JSTFonctions
Déclare des fonctions dans functions.js à la racine :
module.exports = {
// Usage : {{lien(/contact.html, Contactez-nous)}}
lien([href, texte]) {
return `<a href="${href}">${texte || href}</a>`;
},
// Usage : {{header(Mon Site, /logo.png)}}
header([titre, logo], contexte, vars) {
return `<header><a href="${vars._protocol_}://${vars._host_}/">${titre}</a></header>`;
},
// Usage : {{dateFormatee(fr-FR)}}
dateFormatee([locale]) {
return new Date().toLocaleDateString(locale || 'fr-FR', {
weekday: 'long', year: 'numeric', month: 'long', day: 'numeric'
});
}
};Chaque fonction reçoit (args, contexte, variables) et retourne une string HTML.
{{include: fichier}}
Inclure un fichier entier dans une page :
<head>
{{include: partials/meta.html}}
{{include: partials/style.css}}
</head>.jstignore
Les fichiers listés dans .jstignore sont servis tels quels, sans traitement :
variables.json
*.min.js
*.min.css
libs/Déploiement sur Vercel
- Crée
server.jsà la racine :
const path = require('path');
const { creerApp } = require('@luilautre/jst');
const app = creerApp({
racine: path.resolve('./'),
public: path.join(path.resolve('./'), 'public')
});
module.exports = app;- Ajoute
vercel.json:
{
"builds": [{
"src": "server.js",
"use": "@vercel/node",
"config": {
"includeFiles": ["variables.json", "public/**"]
}
}],
"routes": [{ "src": "/(.*)", "dest": "server.js" }]
}- Structure du projet :
mon-projet/
├── server.js ← point d'entrée
├── vercel.json
├── package.json
├── variables.json ← variables globales
├── functions.js ← fonctions JST (optionnel)
├── .jstignore ← fichiers à ne pas traiter (optionnel)
└── public/ ← tes fichiers HTML/CSS/JS
├── index.html
└── style.cssAuteur
luilautre
Licence MIT
