Wie man ts-node dazu bringt, sich bei Dateiänderungen neu zu laden: Analyse echter Stolperfallen
Stellen Sie sich vor: Sie schreiben einen Server in TypeScript, starten ts-node, nehmen eine Änderung vor – und nichts passiert. Sie müssen den Prozess manuell stoppen, Strg+C drücken und neu starten. Kommt Ihnen bekannt vor? Dieses Problem hat tausende Aufrufe auf Stack Overflow gesammelt, und das zu Recht: Die Einrichtung von Watch und Reload für ts-node ist ein echtes Rätsel.
In diesem Artikel gebe ich nicht nur ein fertiges Rezept. Wir analysieren die Top-Fehler, die selbst erfahrene Entwickler machen, und ich zeige Ihnen, wie Sie sie vermeiden. Sie erfahren, warum ts-node --watch nicht "out of the box" funktioniert, was ts-node-dev besser macht als der klassische Ansatz und wie Sie die Serverleistung dabei nicht beeinträchtigen.
Warum lädt ts-node nicht von selbst neu?
Lassen Sie uns gleich Klartext reden. ts-node ist kein Dev-Server. Es ist ein TypeScript-zu-JavaScript-Transpiler, der Code in der Node.js-Laufzeitumgebung ausführt. Es hat keinen integrierten Mechanismus zur Dateiüberwachung (File Watcher). Wenn Sie ts-node app.ts eingeben, führt es die Datei einfach aus und beendet sich.
Um ein automatisches Neuladen bei Dateiänderungen zu erreichen, müssen Sie externe Tools verwenden. Und hier wird es richtig interessant.
Top-5-Fehler bei der Einrichtung von Watch und Reload für ts-node
Ich habe die häufigsten Stolperfallen zusammengestellt, auf die Entwickler treten. Gehen wir jede mit Beispielen und Lösungen durch.
Fehler Nr. 1: Verwendung des Flags --watch ohne das richtige Tool
Viele geben im Terminal ein:
ts-node --watch app.tsUnd wundern sich, dass nichts funktioniert. Der Grund ist, dass ts-node in der Standardauslieferung kein --watch-Flag hat. Dieser Befehl wird entweder ignoriert oder gibt einen Fehler aus.
Lösung: Verwenden Sie nodemon in Kombination mit ts-node. Hier ist der richtige Befehl:
npx nodemon --exec ts-node app.tsOder, wenn Sie es in der package.json speichern möchten:
{ "scripts": { "dev": "nodemon --exec ts-node src/index.ts" }}Dadurch wird nodemon angewiesen, Dateiänderungen zu überwachen und ts-node bei jedem Speichern neu zu starten.
Fehler Nr. 2: nodemon erkennt Änderungen in .ts-Dateien nicht
Sie haben nodemon eingerichtet, speichern eine Datei, aber es reagiert nicht. Warum? Standardmäßig überwacht nodemon nur .js-, .json- und einige andere Erweiterungen. .ts ist nicht in der Liste.
Lösung: Geben Sie die Erweiterungen explizit an:
nodemon --watch src --ext ts --exec ts-node src/index.tsDas Flag --watch src schränkt den Überwachungsbereich auf den Ordner src ein (um node_modules nicht zu überwachen). Und --ext ts fügt TypeScript-Dateien zur Liste der überwachten Erweiterungen hinzu.
Sie können auch eine nodemon.json erstellen:
{ "watch": ["src"], "ext": "ts", "exec": "ts-node src/index.ts"}Fehler Nr. 3: Konflikt mit tsconfig.json – falsche Modulauflösung
Eine typische Situation: Sie verwenden ts-node mit nodemon, erhalten aber beim Start Fehler wie Cannot find module oder Unknown file extension ".ts". Meistens liegt das Problem in den Einstellungen der tsconfig.json.
Beispiel einer problematischen tsconfig.json:
{ "compilerOptions": { "module": "ESNext", "moduleResolution": "bundler", "target": "ES2020" }}Problem: ts-node läuft in der Node.js-Umgebung, während module: "ESNext" mit moduleResolution: "bundler" für Bundler wie Webpa