node.js - TypeScript-Quellen automatisch kompilieren und statische (Template-)Dateien kopieren
Beim Debuggen eines Express-Servers besteht mein 'Build & Run'-Prozess aus 3 Schritten:
- Kompilieren von TypeScript-Quellen mit
tsc - Kopiere statische Dateien wie Bilder und Vorlagen nach
dist/ - Führen Sie die kompilierte
server.js-Datei aus
Jeder dieser Schritte kann mithilfe eines Watch-Modus automatisiert werden, aber ich habe Schwierigkeiten, die drei zusammen zu kombinieren. Es ist mir gelungen, es zum Laufen zu bringen, indem ich tsc-watch verwendet habe, um die TypeScript-Quellen zu überwachen, cpx, um die statischen Dateien zu kopieren, und schließlich nodemon, um den Server neu zu starten. Dieser Ansatz funktioniert, aber es gibt ein paar Probleme:
cpxüberwacht nur Dateien, die zum Zeitpunkt seines Starts existierten (ich glaube,tsc-watchmacht das auch manchmal, es ist ein bisschen seltsam)- Dieser Ansatz erfordert 3 Befehle in 3 separaten Terminals, was einfach nur unpraktisch ist
- Sowohl
cpxals auchtsc-watchbehandeln dasCtrl+C-Beenden nicht korrekt, was alle möglichen Probleme verursacht
Ich habe einige andere Fragen gefunden, die sich auf dieses Thema beziehen, aber keine von ihnen behebt die zuvor genannten Probleme (obwohl sie mir etwas über cpx & tsc-watch gesagt haben). Ich möchte nicht concurrently verwenden, weil es zu Timing-Problemen führen kann und die Konsolenausgaben der verschiedenen Prozesse vermischt (insbesondere tsc-watch und der eigentliche Server).
Die Verwendung von tsc-watch's --onSuccess, um die statischen Dateien zu kopieren, ist nicht ausreichend, da Änderungen in den Template-Dateien nicht erkannt werden. Dies kann umgangen werden, indem ein Kommentar in einer Quelldatei geändert wird, aber dies löst eine vollständige Neukompilierung aus (Starten des Servers). Auch der Watch-Modus von Webpack wäre nicht ausreichend, da er neue Dateien nicht erkennt und die Konsolenausgabe noch mehr verunreinigt.
Gibt es dafür irgendwelche Lösungen, die ich möglicherweise übersehen habe? Sollte ich einfach ein Skript schreiben, das automatisch die 3 erforderlichen Terminals öffnet?
Antwort #1
Für alle, die vor einem ähnlichen Dilemma stehen, würde ich empfehlen, SWC zu verwenden
Du solltest in der Lage sein, mit nur dieser Zeile zu erreichen, was du willst
swc src -D -d dist --strip-leading-paths -w
Verwenden Sie das -w-Flag, um auf Dateiänderungen zu achten
Dann können Sie nodemon verwenden, um Änderungen an Dateien in Ihrem dist-Verzeichnis zu überwachen
Antwort #2
Ich habe mich schließlich für Webpack mit dem copy-webpack-plugin entschieden.
Obwohl der Watch-Modus zum Zeitpunkt des Schreibens leider defekt ist, scheint er fast perfekt zu meinen Bedürfnissen zu passen:
- Dieser Ansatz erfordert nur 2 Terminals (eines für webpack, das andere für nodemon). Es ist nicht perfekt, aber es ist viel besser als 3.
- Neue Dateien sollten automatisch erkannt werden (obwohl es derzeit nicht zu 100% korrekt funktioniert)
- Eine Änderung an statischen Dateien sollte nicht eine vollständige Neukompilierung verursachen, die dazu führen würde, dass der Server neu startet (auch dies funktioniert derzeit nicht zu 100 % korrekt)
- Webpack behandelt
Ctrl+CBeendigungen problemlos - Und der wichtigste Grund für mich: copy-webpack-plugin ermöglicht es mir, festzulegen, wie ich meine Dateien mithilfe der Option 'context' detaillierter kopieren möchte
