Bevorstehende Änderung der 'use strict'-Komponente für Themes – Themes brechen nach dem Upgrade von Discourse

Ich befinde mich jetzt auf dem neuesten Commit-Stand (105634435f). Ich aktualisiere Discourse etwa einmal pro Woche. Normalerweise gibt es überhaupt keine Probleme. Aber jetzt konnten mehrere Theme-Komponenten nicht geladen werden. Mit „nicht geladen

Zusätzlich führen nicht-strikte JavaScript-Variablendefinitionen wie:

xxx = 330;

anstatt

var xxx = 330;

zu JS-Fehlern mit der Meldung „undefined variable“. Wir mussten all diese Fälle in unseren Skripten ändern.

Ja, es gibt ein Problem mit einigen Theme-Komponenten. Wir arbeiten an einer Lösung.

@pmusaraj vielen Dank. Viel Glück!

Wissen Sie, warum Fehler für nicht streng definierte JS-Variablen in Komponenten ausgelöst werden? Ist dies ein Fehler in der Nachbearbeitung? Hat sich hier etwas geändert?

Die Änderung, die diese Probleme verursacht hat, wurde vor einer Stunde rückgängig gemacht. Bitte aktualisieren Sie auf die neueste Version, falls Ihre Website betroffen war.

Als Ergänzung zu Falcos Aussage: Die Änderung wird in den nächsten Tagen wieder eingeführt. Bevor ich dies tue, stelle ich sicher, dass alle unsere offiziellen Themes und Komponenten mit der Änderung kompatibel sind. Falls Sie also erneut Probleme mit offiziellen Themes oder Komponenten feststellen, sollte ein Update diese beheben.

Außerdem werde ich einen Beitrag veröffentlichen, der erklärt, wie man Themes und Komponenten kompatibel macht – für Nutzer, die benutzerdefinierte oder private Komponenten auf ihren Seiten verwenden.

Entschuldigen Sie bitte die heutigen Unannehmlichkeiten.

Eines unserer Themes (ein Banner-Theme) wurde vollständig in sein ursprüngliches Format zurückgesetzt, und alle Änderungen, die wir vorgenommen hatten, sind verloren gegangen. Es gab seit 2018 kein Update für das Theme. Wären wir in der Lage, die Änderungen wiederherzustellen?

Hmm, das ist wirklich seltsam. Hast du deine Instanz erneut aktualisiert, um den Commit Revert "FEATURE: Introduce theme/component QUnit tests (#12517)" (#12… · discourse/discourse@2b9ab3a · GitHub einzubeziehen? Könntest du etwas genauer erläutern, was du mit „initialem Format

Erklärt dies auch das Problem mit JS-Variablendefinitionen? Wenn ja, wie?

Ich glaube nicht, dass dieses Problem mit dieser zurückgenommenen Funktion zusammenhängt. Ich hatte vor ein paar Wochen einen ähnlichen Fall mit einer Komponente, wahrscheinlich im Zusammenhang mit der Gabelungs-Indikator-Funktion (die sich auf Plugins bezieht, also :roll_eyes: wahrscheinlich ebenfalls irrelevant, aber ich musste die Komponente trotzdem gabeln, um Änderungen vorzunehmen).

Das ist wirklich seltsam, wir hatten dieses Problem noch nie. Es ist erst mit der neuesten Version aufgetaucht. Und ich frage mich, was hier genau vor sich geht.

Es handelte sich um eine komplexe Änderung, die auch „inline

Ja, diese Änderung ist die Ursache für das Problem, das Sie in Ihrem Theme gesehen haben. Ich muss etwas genauer auf das Theme-System eingehen, um zu erklären, was passiert ist. Es gibt zwei Möglichkeiten, JS zu einem Discourse-Theme/-Komponente hinzuzufügen: Die erste verwendet <script type="text/discourse-plugin">-Tags innerhalb von head_tag.html-Dateien, und die zweite verwendet eigenständige JS-Dateien, die sich in einem Verzeichnis namens javascripts in Ihrem Theme/-Komponente befinden.

Vor meiner heutigen Änderung wurde JavaScript in diesen speziellen Script-Tags so verarbeitet, dass es auf die globale Variable Discourse angewiesen war, die bei der Entwicklung auf Discourse mit Ember CLI nicht verfügbar ist. Mit der Änderung, die ich heute eingespielt habe, habe ich Discourse so angepasst, dass es das JS in diesen Tags so behandelt, als käme es aus eigenständigen Dateien. Dadurch konnten wir die Verwendung der globalen Variable Discourse vermeiden.

Ein „Nebeneffekt

Ja, es waren nur einige nachlässige Definitionen in unserem Code, und nachdem wir die Definitionen strikt gemacht haben, funktioniert alles einwandfrei.

Wie auch immer, vielen Dank für die genauere Erklärung. Das ist wahrscheinlich auch für andere hilfreich.

Ja, alle Änderungen sind weg – von CSS- und JS-Änderungen bis hin zu Textänderungen :sweat:. Das heißt, mein Theme ist wieder im ursprünglichen Format mit Texten wie „Lorem ipsum dolor sit amet …". Ich werde ohnehin das Backup verwenden, aber es war seltsam, dass dies nach dem Upgrade passiert ist.

Hallo @Pad_Pors,

ich denke, dein Problem hängt eher damit zusammen. :slightly_smiling_face:

Zum anderen Punkt, den du geschrieben hast:

Ich vermute daher, dass du dein Discourse schon eine Weile nicht aktualisiert hast.