Discourse non viene renderizzato su gecko prima della versione 74

Il commit 08883cbdd1c39a0c15b97af44ddaefe14acdc21a ha rotto il rendering di Discourse sulle versioni più vecchie di Gecko. Gecko non supporta l’operatore di concatenazione opzionale prima della versione 74.

Per ulteriori informazioni, consulta https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining#browser_compatibility .

2 Mi Piace

Oh, dovremmo traspileare questo, @pmusaraj / @eviltrout / @j.jaffeux?

3 Mi Piace

Potrei sbagliarmi, ma la mia prima ipotesi è che non definiamo la lista dei browser e il sistema ne sta usando una predefinita (probabilmente @babel/preset-env · Babel), non considerando questa versione come supportata e, di conseguenza, non effettuando la traspilazione.

È strano, però: Firefox 74 ha solo un anno, ma sì, guardando attualmente browserlist:

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

Ora, la domanda è: @sam, vogliamo supportarlo? Anche se ha solo un anno, la versione attuale di Firefox è la 89, quindi questa è indietro di 15 versioni. Non sono sicuro al riguardo, la decisione è tua. È importante considerare che supportarlo aumenterà il peso del payload per tutti, poiché la traspilazione funziona più o meno come un polyfill (aggiungendo alcune funzioni per supportare questa versione e sostituendo la sintassi con chiamate a funzioni).

2 Mi Piace

(Nella versione stabile è UX: Add auto focus to hamburger and user menu dropdowns (#13165) · discourse/discourse@45dca79 · GitHub)

Per curiosità, lo stile di codice precedente funziona bene, perché non attenersi a quello per ora? :thinking: FIX: We can't use `?.` yet (#13168) · discourse/discourse@96fd202 · GitHub

2 Mi Piace

Ci sono molti motivi, ma soprattutto rende tutto più semplice per gli sviluppatori: non dobbiamo preoccuparci troppo di cosa possiamo o non possiamo usare, e abbiamo una base piuttosto moderna.

4 Mi Piace

Sono disposto a eliminare il supporto a condizione che sia presente il nostro fallback HTML.

Ciò che assolutamente non possiamo fare è mostrare una pagina statica funzionante a IE9 e una pagina rotta a Firefox di un anno fa.

Preferisco semplicemente transpilare fino a Firefox/Chrome di 2-3 anni fa, ma sono felice di lasciare questa decisione a @eviltrout e a voi. Possiamo essere più aggressivi, suppongo, ma non possiamo mostrare pagine rotte.

Modifica: vedi il backlink, questo può essere un problema piuttosto serio su Android, che tende ad avere una cadenza terribile nell’aggiornamento dei browser.

5 Mi Piace

Non potrei essere più d’accordo, e mi preoccupa che la compatibilità dei browser abbia subito alcuni colpi recentemente.

Inoltre su iOS c’era questa: Safari (iOS) shows blank pages on Discourse instances after beta 8 due to manually disable IntersectionObserver

1 Mi Piace

Sì, concordo. Come minimo dovremmo implementare il supporto per browserlist, in modo che le funzionalità non supportate non ci prendano di sorpresa.

3 Mi Piace

Questo problema può limitare l’indicizzazione di Google?

Voglio solo capire se devo cercare altrove la causa di questo blocco dell’indicizzazione.

Grazie

Non riesco a riprodurre l’OP su meta. Ho provato tramite Browserstack usando Firefox 73 su macOS e Firefox 68 su Windows. @vige, riesci a riprodurre il problema su meta?

4 Mi Piace

Penso che tu abbia ragione, dovrebbe funzionare effettivamente. Ho appena controllato il codice nel browser:

    toggleHamburger: function toggleHamburger() {
      this.state.hamburgerVisible = !this.state.hamburgerVisible;
      this.toggleBodyScrolling(this.state.hamburgerVisible); // auto focus on first link in dropdown

      (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();
      });
    },

Tieni presente che dovremmo comunque cercare di capire esattamente cosa viene trasformato e cosa no, anche se potrebbe non essere il problema qui.

4 Mi Piace

Ok, correggimi se sbaglio @pmusaraj, ma penso che, dato che non impostiamo preset-env e di conseguenza non definiamo i target, tutti i plugin che includiamo vengano utilizzati. Di conseguenza, proposal-optional-chaining viene sicuramente applicato.

Penso che vada bene così; forse dobbiamo solo controllare ogni anno ogni plugin e rivalutare se è ancora necessario?

2 Mi Piace

Trovato. Solo stable è rotto. proposal-optional-chaining non viene applicato lì.

In tests-passed la modifica ?. include la modifica proposal-optional-chaining: DEV: Enable optional chaining in all contexts (#13180) · discourse/discourse@855e854 · GitHub

mentre in stable è stata effettuata solo la modifica del codice con ?., ma le opzioni del transpiler non sono state adeguate: UX: Add auto focus to hamburger and user menu dropdowns (#13165) · discourse/discourse@45dca79 · GitHub

3 Mi Piace

Sì, ottimo riscontro:

  • abbiamo aggiunto del codice con l’operatore di concatenazione opzionale
  • lo abbiamo annullato
  • l’abbiamo aggiunto di nuovo con il plugin babel corretto

Tuttavia, 5 giorni fa abbiamo fatto il backport solo del commit originale, senza il plugin:

@pmusaraj Credo che fare il backport del plugin nella versione stabile sia sicuro, non credi?

8 Mi Piace

Sì, concordo, dovremmo fare il backport. Ci lavorerò più tardi oggi.

10 Mi Piace

Questo è stato risolto nella versione stabile (v2.7.4): il plugin proposal-optional-chaining per Babel è ora abilitato e risolve il problema.

Grazie a @RGJ @j.jaffeux (e a @vige per la segnalazione originale)!

12 Mi Piace

Aha, ha tutto il senso! Il codice è stabile, ma il transpiler non lo è. Grazie per il lavoro investigativo.

7 Mi Piace

Grazie mille a tutti gli sviluppatori coinvolti per aver risolto il problema così rapidamente!

Per la cronaca, secondo i miei test, questo bug stava influenzando, in alcuni casi, anche l’ultima versione di Microsoft Edge per Android (che, per quanto ne so, non utilizza Gecko).

6 Mi Piace

Potresti essere così gentile da aggiungere l’etichetta effettiva v2.7.4 a quella release?
Ho appena passato mezz’ora a provare a eseguire git checkout v2.7.4, che si è rivelato inesistente :sweat_smile:

3 Mi Piace

Scusa per questo. Ora è taggato.

7 Mi Piace