Discourse ne s'affiche pas sur gecko avant la version 74

Le commit 08883cbdd1c39a0c15b97af44ddaefe14acdc21a a rompu le rendu de Discourse sur les anciennes versions de Gecko. Gecko ne prend pas en charge l’opérateur de chaînage optionnel avant la version 74.

Voir https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining#browser_compatibility pour plus d’informations.

2 « J'aime »

Oh, nous sommes censés transpiler cela, @pmusaraj / @eviltrout / @j.jaffeux ?

3 « J'aime »

Je peux me tromper, mais mon hypothèse initiale est que nous ne définissons pas la liste des navigateurs et qu’il utilise une valeur par défaut (probablement @babel/preset-env · Babel), ne considérant pas cette version comme prise en charge, ce qui explique pourquoi elle n’est pas transpilée.

C’est étrange tout de même : Firefox 74 n’a qu’un an, mais en regardant la liste des navigateurs actuellement :

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

La question est donc : @sam, voulons-nous le prendre en charge ? Bien qu’il n’ait qu’un an, la version actuelle de Firefox est la 89, soit 15 versions en arrière. Je ne suis pas sûr, c’est à vous de décider. Il est important de noter que le support de cette version alourdira la charge de chacun, car la transpilation fonctionne plus ou moins comme un polyfill (ajout de fonctions pour le supporter et remplacement de la syntaxe par des appels de fonctions).

2 « J'aime »

(Sur la version stable, c’est UX: Add auto focus to hamburger and user menu dropdowns (#13165) · discourse/discourse@45dca79 · GitHub)

Par curiosité, l’ancien style de code fonctionne bien, pourquoi ne pas s’y tenir pour l’instant ? :thinking: FIX: We can't use `?.` yet (#13168) · discourse/discourse@96fd202 · GitHub

2 « J'aime »

Il y a beaucoup de raisons, mais surtout cela facilite tout pour les développeurs : nous n’avons pas à trop réfléchir à tout ce que nous pouvons utiliser ou non, et nous bénéficions d’une base plutôt moderne.

4 « J'aime »

Je suis ouvert à abandonner la prise en charge à condition que notre solution de repli HTML soit en place.

Ce que nous ne pouvons absolument pas faire, c’est afficher une page statique fonctionnelle sur IE9 et une page cassée sur Firefox d’il y a un an.

Je préférerais simplement transpiler jusqu’à Firefox/Chrome d’il y a 2 à 3 ans, mais je suis heureux de laisser cette décision à @eviltrout et à vous. Nous pouvons être plus agressifs, je suppose, mais nous ne pouvons pas afficher de pages cassées.

Édition : voir le lien retour, cela peut être un problème assez grave sur Android, qui a tendance à avoir une fréquence de mise à jour des navigateurs terrible.

5 « J'aime »

Je ne peux que souscrire à cette affirmation, et je m’inquiète effectivement de la compatibilité des navigateurs qui a récemment subi quelques coups.

Par ailleurs, sur iOS, il y avait ceci : Safari (iOS) shows blank pages on Discourse instances after beta 8 due to manually disable IntersectionObserver

1 « J'aime »

Oui, d’accord. Au minimum, nous devrions implémenter le support de browserlist afin que les fonctionnalités non prises en charge ne nous surprennent pas.

3 « J'aime »

Ce problème peut-il limiter l’indexation par Google ?

Je cherche simplement à savoir si je dois me tourner ailleurs pour identifier la cause de ce blocage d’indexation.

Merci

Je n’arrive pas à reproduire le problème de l’OP sur Meta. J’ai essayé via Browserstack avec Firefox 73 sur macOS et Firefox 68 sur Windows. @vige, peux-tu reproduire le problème sur Meta ?

4 « J'aime »

Je pense que vous avez raison, cela devrait en fait fonctionner. Je viens de regarder le code dans le navigateur :

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

Notez que nous devrions tout de même essayer de savoir exactement ce qui est transpilé ou non, même si ce n’est peut-être pas le problème ici.

4 « J'aime »

Ok, corrigez-moi si je me trompe @pmusaraj, mais je pense que comme nous ne définissons pas preset-env et, par conséquent, pas de cibles, tous les plugins que nous incluons sont utilisés. Par conséquent, proposal-optional-chaining est certainement appliqué.

Je pense que cela me convient, nous devons peut-être simplement vérifier chaque année chaque plugin et réévaluer s’il est toujours nécessaire ?

2 « J'aime »

Je l’ai trouvé. Seul stable est cassé. proposal-optional-chaining n’y est pas appliqué.

Dans tests-passed, la modification ?. inclut la modification proposal-optional-chaining : DEV: Enable optional chaining in all contexts (#13180) · discourse/discourse@855e854 · GitHub

et dans stable, seule la modification de code avec ?. a été effectuée, mais les options du transpileur n’ont pas été ajustées : UX: Add auto focus to hamburger and user menu dropdowns (#13165) · discourse/discourse@45dca79 · GitHub

3 « J'aime »

Oui, bonne remarque :

  • nous avons ajouté du code utilisant l’enchaînement optionnel
  • nous l’avons annulé
  • nous l’avons réajouté avec le plugin Babel approprié

Cependant, il y a 5 jours, nous avons rétroporté uniquement le commit original, sans le plugin :

@pmusaraj, je pense que le rétroport du plugin dans la version stable devrait également être sûr, n’est-ce pas ?

8 « J'aime »

Oui, d’accord, nous devrions faire un backport. Je m’en occuperai plus tard aujourd’hui.

10 « J'aime »

Ceci est désormais corrigé dans la version stable (v2.7.4) : le plugin proposal-optional-chaining pour Babel y est maintenant activé et résout le problème.

Merci à @RGJ, @j.jaffeux (et à @vige pour le signalement initial) !

12 « J'aime »

Ah, ça a beaucoup de sens ! Le code est en version stable, mais le transpileur ne l’est pas. Merci d’avoir fait le travail d’enquête.

7 « J'aime »

Un grand merci à tous les développeurs concernés pour avoir résolu cela si rapidement !

Pour la petite histoire, selon mes tests, ce bug affectait également, dans certains cas, la dernière version de Microsoft Edge pour Android (qui, à ma connaissance, n’utilise pas Gecko).

6 « J'aime »

Pourriez-vous avoir l’amabilité d’ajouter l’étiquette réelle v2.7.4 à cette version ?
Je viens de passer une demi-heure à essayer de faire un git checkout v2.7.4 qui s’est avéré inexistant :sweat_smile:

3 « J'aime »

Désolé pour cela. Il est maintenant tagué.

7 « J'aime »