Discourse wird vor Version 74 nicht auf Gecko gerendert

Der Commit 08883cbdd1c39a0c15b97af44ddaefe14acdc21a hat die Discourse-Darstellung bei älteren Gecko-Versionen beschädigt. Gecko unterstützt den Optional-Chaining-Operator erst ab Version 74.

Weitere Informationen finden Sie unter https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining#browser_compatibility .

2 „Gefällt mir“

Oh, wir sollen das eigentlich transpilieren, @pmusaraj / @eviltrout / @j.jaffeux?

3 „Gefällt mir“

Ich könnte mich irren, aber meine erste Vermutung ist, dass wir keine Browserliste definieren und stattdessen eine Standardliste verwendet wird (wahrscheinlich @babel/preset-env · Babel). Diese berücksichtigt diese Version nicht als unterstützte Version, wodurch sie nicht transpiliert wird.

Es ist jedoch seltsam, dass Firefox 74 erst ein Jahr alt ist. Wenn man sich die aktuelle Browserliste ansieht:

$ npx browserslist
...
firefox 89
firefox 88
firefox 78
...

Die Frage ist nun: @sam, möchten wir diese Version unterstützen? Obwohl sie erst ein Jahr alt ist, ist die aktuelle Firefox-Version 89, also 15 Versionen neuer. Ich bin mir nicht sicher, das ist deine Entscheidung. Wichtig ist zu bedenken, dass die Unterstützung dieser Version das Gewicht der Payload für alle erhöht, da Transpilierung im Wesentlichen wie ein Polyfill funktioniert (es werden einige Funktionen hinzugefügt, um diese Version zu unterstützen, und die Syntax wird durch Funktionsaufrufe ersetzt).

2 „Gefällt mir“

(Auf dem Stable-Branch ist dies UX: Add auto focus to hamburger and user menu dropdowns (#13165) · discourse/discourse@45dca79 · GitHub)

Aus Neugier: Der alte Code-Stil funktioniert gut, warum nicht vorerst dabei bleiben? :thinking: FIX: We can't use `?.` yet (#13168) · discourse/discourse@96fd202 · GitHub

2 „Gefällt mir“

Es gibt viele Gründe, aber hauptsächlich erleichtert es die Arbeit für Entwickler. Wir müssen uns nicht allzu viele Gedanken darüber machen, was wir nutzen dürfen oder nicht, und haben eine eher moderne Basis.

4 „Gefällt mir“

Ich bin offen dafür, die Unterstützung fallen zu lassen, sofern unsere HTML-Fallback-Lösung vorhanden ist.

Was wir auf keinen Fall tun können, ist, IE9 eine funktionierende statische Seite und einem ein Jahr alten Firefox eine kaputte Seite anzuzeigen.

Ich bevorzuge es, nur bis auf einen Firefox/Chrome von vor 2–3 Jahren zu transpilieren, bin aber gerne bereit, diese Entscheidung @eviltrout und dir zu überlassen. Wir könnten es etwas aggressiver angehen, aber wir können keine kaputten Seiten anzeigen.

Edit: Siehe Rückverweis. Dies kann auf Android ein ziemlich ernstes Problem sein, da Browser-Updates dort oft nur sehr schleppend erfolgen.

5 „Gefällt mir“

Dem kann ich nur voll zustimmen, und ich mache mir tatsächlich Sorgen, dass die Browserkompatibilität in letzter Zeit einige Rückschläge erlitten hat.

Außerdem gab es unter iOS folgendes Problem: Safari (iOS) shows blank pages on Discourse instances after beta 8 due to manually disable IntersectionObserver

1 „Gefällt mir“

Ja, einverstanden. Mindestens sollten wir die Unterstützung für Browserslisten implementieren, damit unerwartete Probleme mit nicht unterstützten Funktionen uns nicht überraschen.

3 „Gefällt mir“

Kann dieses Problem die Google-Indexierung einschränken?

Ich möchte nur herausfinden, ob ich anderswo nach der Ursache für diese Indexierungsblockade suchen muss.

Vielen Dank.

Ich kann das OP auf Meta nicht reproduzieren. Ich habe es über Browserstack mit Firefox 73 auf macOS und Firefox 68 auf Windows versucht. @vige, kannst du das Problem auf Meta reproduzieren?

4 „Gefällt mir“

Ich denke, du hast recht, es sollte eigentlich funktionieren. Ich habe gerade den Code im Browser angesehen:

    toggleHamburger: function toggleHamburger() {
      this.state.hamburgerVisible = !this.state.hamburgerVisible;
      this.toggleBodyScrolling(this.state.hamburgerVisible); // Fokus automatisch auf den ersten Link im Dropdown setzen

      (0, _runloop.schedule)("afterRender", function () {
        var _document$querySelect2;

        (_document$querySelect2 = document.querySelector(".hamburger-panel .menu-links a")) === null || _document$querySelect2 === void 0 ? void 0 : _document$querySelect2.focus();
      });
    },

Beachte, dass wir trotzdem versuchen sollten, genau herauszufinden, was transpiliert wird und was nicht, auch wenn dies hier möglicherweise nicht das Problem ist.

4 „Gefällt mir“

Korrektur, falls ich falsch liege, @pmusaraj, aber ich denke, da wir preset-env nicht festlegen und somit keine Ziele definieren, werden alle Plugins, die wir einbinden, verwendet. Folglich wird proposal-optional-chaining definitiv angewendet.

Ich bin damit einverstanden, wir müssen vielleicht jedes Jahr jedes Plugin überprüfen und überlegen, ob es noch benötigt wird?

2 „Gefällt mir“

Habe es gefunden. Nur stable ist kaputt. proposal-optional-chaining wird dort nicht angewendet.

In tests-passed enthält die ?.-Änderung auch die proposal-optional-chaining-Änderung: DEV: Enable optional chaining in all contexts (#13180) · discourse/discourse@855e854 · GitHub

Und in stable wurde nur die Codeänderung mit ?. vorgenommen, aber die Transpiler-Optionen wurden nicht angepasst: UX: Add auto focus to hamburger and user menu dropdowns (#13165) · discourse/discourse@45dca79 · GitHub

3 „Gefällt mir“

Ja, guter Hinweis:

  • Wir haben Code mit optionaler Verkettung hinzugefügt.
  • Wir haben ihn rückgängig gemacht.
  • Wir haben ihn mit dem richtigen Babel-Plugin wieder hinzugefügt.

Vor fünf Tagen haben wir jedoch nur den ursprünglichen Commit ohne das Plugin zurückportiert:

@pmusaraj Ich denke, das Zurückportieren des Plugins in die stabile Version sollte ebenfalls sicher sein, oder?

8 „Gefällt mir“

Ja, einverstanden, wir sollten es zurückportieren. Ich werde heute später daran arbeiten.

10 „Gefällt mir“

Dies ist jetzt in der stabilen Version (v2.7.4) behoben. Das proposal-optional-chaining-Plugin für Babel ist dort nun aktiviert und löst das Problem.

Danke an @RGJ @j.jaffeux (und an @vige für den ursprünglichen Bericht)!

12 „Gefällt mir“

Aha, das ergibt total Sinn! Der Code ist stabil, aber der Transpiler noch nicht. Danke für die Detektivarbeit.

7 „Gefällt mir“

Vielen Dank an alle beteiligten Entwickler, dass ihr das so schnell behoben habt!

Zur Information: Nach meinen Tests betraf dieser Fehler in einigen Fällen auch die neueste Version von Microsoft Edge für Android (die, soweit ich weiß, nicht auf Gecko läuft).

6 „Gefällt mir“

Wärst du so nett, das tatsächliche v2.7.4-Tag zu diesem Release hinzuzufügen?
Ich habe gerade eine halbe Stunde damit verbracht, git checkout v2.7.4 auszuprobieren, was sich als nicht existent herausstellte :sweat_smile:

3 „Gefällt mir“

Entschuldigung dafür. Es ist jetzt tagged.

7 „Gefällt mir“