Bibliothèque node-schedule : un planificateur de tâches flexible en TypeScript
Dans le développement web moderne, il est souvent nécessaire d'exécuter certaines actions à un moment donné ou selon un planning. Pour l'écosystème Node.js et TypeScript, il existe plusieurs solutions, mais node-schedule se distingue par sa flexibilité et sa simplicité. Cette bibliothèque permet de créer à la fois des tâches ponctuelles à une date précise et des tâches récurrentes à l'aide d'expressions cron ou d'intervalles lisibles par l'homme.
Fonctionnalités principales de node-schedule
- Exécution à un moment précis – lancement d'une tâche à un instant spécifique (date + heure)
- Expressions cron – syntaxe classique pour les tâches périodiques (chaque minute, chaque heure, etc.)
- Règles récurrentes – configuration flexible des répétitions avec l'objet
RecurrenceRule - Annulation et suspension – gestion des tâches actives
- Support des fuseaux horaires – travail avec l'heure locale
Installation et configuration
Pour commencer, installez le package via npm :
npm install node-schedulenpm install @types/node-schedule --save-devImport dans un fichier TypeScript :
import * as schedule from 'node-schedule';Exemple 1 : Tâche à une date précise
Créons une tâche qui s'exécutera le 31 décembre 2024 à 23:59:59 :
const date = new Date(2024, 11, 31, 23, 59, 59);
const job = schedule.scheduleJob(date, () => { console.log('🎉 Bonne année 2025 !');});
// Annulation de la tâche (si nécessaire)// job.cancel();Exemple 2 : Tâche périodique avec expression cron
Lancement d'une tâche toutes les 5 minutes :
const job = schedule.scheduleJob('*/5 * * * *', () => { console.log('J\'exécute une tâche toutes les 5 minutes');});Format de l'expression cron : seconde minute heure jour_du_mois mois jour_de_la_semaine. Dans node-schedule, les 6 champs sont supportés (contrairement au cron classique qui en a 5).
Exemple 3 : Utilisation de RecurrenceRule
Créons une tâche qui s'exécute chaque mardi et jeudi à 10h30 du matin :
const rule = new schedule.RecurrenceRule();rule.dayOfWeek = [2, 4]; // mardi et jeudirule.hour = 10;rule.minute = 30;
const job = schedule.scheduleJob(rule, () => { console.log('Envoi du rapport hebdomadaire');});RecurrenceRule supporte les champs suivants :
year– année ou tableau d'annéesmonth– mois (0-11) ou tableaudate– jour du mois (1-31)dayOfWeek– jour de la semaine (0-6, où 0 est dimanche)hour– heure (0-23)minute– minute (0-59)second– seconde (0-59)
Exemple 4 : Règles combinées
Tâche qui s'exécute le dernier jour de chaque mois à 23:59 :
const rule = new schedule.RecurrenceRule();rule.month = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; // tous les moisrule.date = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // derniers jours de chaque moisrule.hour = 23;rule.minute = 59;rule.second = 59;
const job = schedule.scheduleJob(rule, () => { console.log('Exécution le dernier jour du mois');});Gestion des tâches
La bibliothèque fournit des méthodes pour un contrôle total des tâches :
// Création d'une tâcheconst job = schedule.scheduleJob('*/10 * * * * *', () => { console.log('Toutes les 10 secondes');});
// Annulation de la tâchejob.cancel();
// Vérification si la tâche est activeconsole.log(job.pending()); // true ou false
// Annulation de toutes les tâchesschedule.gracefulShutdow Aussi dans la bibliothèque
Travailler avec Kafka en Rust : bibliothèques et exemples pour débutants
Frameworks CLI pour Java : Picocli, JCommander et Spring Shell
Envoi de SMS en C# (.NET) : bibliothèques API et exemples de code
opentelemetry-go pour Go : guide complet avec exemples