Dieser Artikel erklärt, wie man Dateiänderungen überwacht und Aktionen mit der Node.js-Standardbibliothek “fs.watch” auslöst.
Das Folgende ist Beispielcode aus der offiziellen Dokumentation File system | Node.js v16.1.0 Documentation mit einigen Modifikationen.
const fs = require('fs');
fs.watch('./file.txt', (eventType, filename) => {
console.log(`event type is: ${eventType}`);
if (filename) {
console.log(`filename provided: ${filename}`);
} else {
console.log('filename not provided');
}
});
Dies überwacht die Datei ”./file.txt” im aktuellen Verzeichnis und protokolliert, wenn Änderungen auftreten.
Für diesen Artikel implementiere ich ein Beispiel, das eine Aktion ausführt, wenn sich die Datei ändert - speziell das Warten auf Dateiänderungen und das Fortsetzen des Skripts bei einer Änderung. Hier ist das Code-Beispiel. Ich habe es so einfach wie möglich geschrieben, unnötigen Code eliminiert und nur die minimale Funktionalität implementiert.
(async function(){
await (new Promise((resolve) => {
fs.watch('./file', (e, f) => { resolve() })
})); // wait for file change
console.log("changed.");
})();
Da fs.watch keine synchrone Version wie filereadsync hat, implementieren wir es durch Kombination mit einem Promise. Wir warten auf das Promise mit “await”, und wenn sich ./file ändert, führen wir resolve() aus, um das Promise zu verlassen und mit console.log fortzufahren.
In diesem Artikel haben wir einen einfachen Mechanismus zum Warten auf Dateiänderungen mit integrierten Node.js-Bibliotheken implementiert. Wenn Sie jedoch ein Kommandozeilen-Tool mit dieser Funktionalität erstellen oder etwas Komplexeres bauen möchten, empfehle ich, andere vorhandene Bibliotheken und Kommandozeilen-Tools zu prüfen, wie z.B. bash’s “inotifywait” oder die Node.js-Bibliothek “nodemon”.