Discourse Theme CLI-Fehler bei pnpm-installierten node_modules aufgrund von Symlinks

Wenn Sie die Discourse Theme CLI in einem Theme-Komponenten-Repository mit installiertem pnpm node_modules ausführen, gibt der Befehl discourse_theme watch . Fehler aus, dass Verzeichnisse wie node_modules/.pnpm bereits überwacht werden. Oberflächlich betrachtet liegt dies daran, dass die Pakete per Symlink verbunden sind.

Ich habe dies in einem frischen GitHub Codespace mit der offiziellen Mermaid TC unter Verwendung von discourse_theme v2.1.3 getestet.

Auszug aus den Fehlerprotokollen
** ERROR: directory is already being watched! **

Directory: /workspaces/discourse-mermaid-theme-component/node_modules/.pnpm/ember-template-recast@6.1.5/node_modules/@glimmer/reference

is already being watched through: /workspaces/discourse-mermaid-theme-component/node_modules/.pnpm/@glimmer+reference@0.84.3/node_modules/@glimmer/reference

MORE INFO: https://github.com/guard/listen/blob/master/README.md
** ERROR: directory is already being watched! **

Directory: /workspaces/discourse-mermaid-theme-component/node_modules/.pnpm/@humanwhocodes+retry@0.3.1/node_modules/@humanwhocodes/retry

is already being watched through: /workspaces/discourse-mermaid-theme-component/node_modules/.pnpm/@humanwhocodes+retry@0.3.1/node_modules/@humanwhocodes/retry

MORE INFO: https://github.com/guard/listen/blob/master/README.md

Ich vermute, dass dies damit zusammenhängt, dass discourse_theme das gesamte Verzeichnis überwacht, ohne Ausnahmen für node_modules/.pnpm oder node_modules im Allgemeinen festzulegen.

Es ist kein großes Problem, da discourse_theme watch nach den Fehlern anscheinend einwandfrei funktioniert, aber ich sehe die Meldung "Watching for changes..." nach den Fehlern nicht, die von https://github.com/discourse/discourse_theme/blob/main/lib/discourse_theme/watcher.rb#L45-L48 stammen sollte, was zu Verwirrung führen könnte. Außerdem fühlt es sich nicht gut an, von npm/yarn zu pnpm zu wechseln, nur um dann zu sehen, wie die CLI eine Reihe von Fehlern auf den Bildschirm wirft.

3 „Gefällt mir“

Normalerweise führe ich dies vom Discourse-Verzeichnis aus, aber ich beobachte den Theme-Code-Ordner, also so etwas wie:

discourse_theme watch ~code/my-new-theme

Gibt es einen Grund, warum Sie ihn aus demselben Ordner ausführen?

Ich frage mich, ob das Ihre Probleme verursacht? :thinking:

Ich verwende es aus dem TC-Verzeichnis selbst heraus, da ich das Theme normalerweise entweder gegen meine lokale Entwicklungsinstanz, eine Entwicklungs kopie des Forums, das sich nicht auf meinem Computer befindet, oder die Theme Creator-Website entwickle/teste (bei der der API-Schlüsselgenerator in letzter Zeit nicht zu funktionieren scheint). Ich versuche, Verwirrung darüber zu vermeiden, in welcher Umgebung ich arbeite.

Ich habe Mermaid TC in denselben Codespace geklont wie eine frische Discourse Codespace-Installation und versucht, discourse_theme watch vom Discourse-Verzeichnis aus auszuführen. Es gibt die gleichen Fehler.

Das ist in Ordnung, aber nichts hindert Sie daran, es aus einem anderen Terminal-Tab heraus auszuführen … und aus dem Discourse-Verzeichnis heraus?

Sicher, es ist willkürlich, aber es ist ein wenig lächerlich, discourse_theme aus einem lokalen Klon von Discourse ausführen zu müssen, wenn die zu testende Discourse-Instanz nicht die lokale Instanz ist.

Wie auch immer, ich habe wie von Ihnen vorgeschlagen sowohl in einem frischen GitHub Codespace als auch in meiner eigenen Entwicklungsumgebung Folgendes getan, und es treten immer noch dieselben Fehler auf.


Wenn ich das gesamte Protokoll (oder alle, die in den Terminalverlauf passen) durchlese, sind alle Verzeichnisse, bei denen ein Fehler auftritt, /node_modules/.pnpm. Beim Testen und Ausführen von discourse_theme gegen eine andere TC, die noch nicht auf pnpm anstelle von yarn aktualisiert wurde, sehe ich keine Fehler. Daher bin ich mir fast zu 100 % sicher, dass das Problem darin liegt, dass .pnpm beobachtet wird.

Von Symlinked `node_modules` structure | pnpm sieht es so aus, als ob die normale Struktur von node_modules erhalten bleibt, indem der gesamte tatsächliche Code in /node_modules/.pnpm verschoben wird und die übrigen Verzeichnisse in /node_modules/ nur Symlinks zu .pnpm sind. Das Ignorieren von .pnpm vermeidet also den Fehler „Verzeichnis wird bereits überwacht!“.

Ich habe ein wenig mit dem discourse_theme-Gem gespielt und listener.ignore /node_modules\\/\\.pnpm/ zu watcher.rb hinzugefügt, und es scheint ohne Fehlermeldungen gut zu funktionieren. Es hat sogar eine Neuinstallation eines pnpm-Pakets erkannt.

3 „Gefällt mir“

Dieser PR wird die Ignorierregel anwenden und die Warnungen unterdrücken. Danke für die Erstellung des Themas und die Untersuchung, @Alteras – diese Warnungen haben mich auch genervt! :sweat_smile:

4 „Gefällt mir“

Dieses Thema wurde 30 Tage nach der letzten Antwort automatisch geschlossen. Neue Antworten sind nicht mehr möglich.