Discourse não renderiza no gecko antes da versão 74

O commit 08883cbdd1c39a0c15b97af44ddaefe14acdc21a quebrou a renderização do Discourse em versões mais antigas do Gecko. O Gecko não suporta o operador de encadeamento opcional antes da versão 74.

Veja https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining#browser_compatibility para mais informações.

2 curtidas

Ah, nós deveríamos estar transpilando isso, @pmusaraj / @eviltrout / @j.jaffeux?

3 curtidas

Posso estar errado, mas a suposição inicial é que não definimos a lista de navegadores e ele está usando algum padrão (provavelmente @babel/preset-env · Babel), não considerando essa versão como algo que suportamos e, como resultado, não há transpilação.

É estranho, porém, que o Firefox 74 tenha apenas um ano de idade, mas, ao verificar o browserslist atualmente:

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

Agora, a pergunta é: @sam, queremos dar suporte a isso? Embora tenha apenas um ano, a versão atual do Firefox é a 89, então essa versão está 15 lançamentos atrás. Não tenho certeza sobre isso; sua decisão. É importante considerar que, para dar suporte a essa versão, será necessário aumentar o peso do payload de todos, pois a transpilação funciona mais ou menos como um polyfill (adicionando algumas funções para dar suporte a essa versão e substituindo a sintaxe por chamadas de função).

2 curtidas

(Na versão estável, isso é UX: Add auto focus to hamburger and user menu dropdowns (#13165) · discourse/discourse@45dca79 · GitHub)

Por curiosidade, o estilo de código antigo funciona bem, por que não continuar com ele por enquanto? :thinking: FIX: We can't use `?.` yet (#13168) · discourse/discourse@96fd202 · GitHub

2 curtidas

Há muitas razões, mas principalmente isso torna tudo mais fácil para o desenvolvedor: não precisamos pensar demais em tudo o que podemos ou não usar, e temos uma base bastante moderna.

4 curtidas

Estou aberto a retirar o suporte, desde que nossa alternativa em HTML esteja implementada.

O que certamente não podemos fazer é mostrar uma página estática funcional para o IE9 e uma página quebrada para um Firefox de 1 ano de idade.

Prefiro apenas transpilar para um Firefox/Chrome de 2 a 3 anos, mas estou feliz em deixar essa decisão para @eviltrout e para você. Podemos ser mais agressivos, imagino, mas não podemos exibir páginas quebradas.

Edição: veja o backlink, isso pode ser um problema bastante sério no Android, que tende a ter um ritmo terrível de atualização de navegadores.

5 curtidas

Não poderia concordar mais, e realmente me preocupo que a compatibilidade com navegadores tenha sofrido alguns golpes ultimamente.

Além disso, no iOS, houve isso: Safari (iOS) shows blank pages on Discourse instances after beta 8 due to manually disable IntersectionObserver

1 curtida

Sim, concordo. No mínimo, devemos implementar o suporte ao Browserlist para que funcionalidades não suportadas não surjam como uma surpresa para nós.

3 curtidas

Esse problema pode limitar a indexação pelo Google?

Estou apenas tentando descobrir se preciso procurar em outro lugar a causa desse bloqueio de indexação.

Obrigado

Não consigo reproduzir o OP no meta. Tentei pelo Browserstack usando o Firefox 73 no macOS e o Firefox 68 no Windows. @vige, você consegue reproduzir o problema no meta?

4 curtidas

Acho que você tem razão, deve funcionar mesmo. Acabei de olhar o código no navegador:

    toggleHamburger: function toggleHamburger() {
      this.state.hamburgerVisible = !this.state.hamburgerVisible;
      this.toggleBodyScrolling(this.state.hamburgerVisible); // foco automático no primeiro link do menu suspenso

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

Observe que ainda devemos tentar saber exatamente o que está sendo transpilado ou não, mesmo que isso possa não ser o problema aqui.

4 curtidas

Ok, corrija-me se eu estiver errado, @pmusaraj, mas acho que, como não configuramos o preset-env e, consequentemente, não definimos os alvos, todos os plugins que incluímos são utilizados. Como resultado, o proposal-optional-chaining certamente está sendo aplicado.

Acho que estou de acordo com isso; talvez apenas precisemos verificar todos os anos cada plugin e reavaliar se ainda é necessário?

2 curtidas

Encontrei. Apenas stable está quebrado. proposal-optional-chaining não está sendo aplicado lá.

Em tests-passed, a mudança do ?. inclui a mudança do proposal-optional-chaining: DEV: Enable optional chaining in all contexts (#13180) · discourse/discourse@855e854 · GitHub

Já em stable, apenas a mudança de código com o ?. foi feita, mas as opções do transpilador não foram ajustadas: UX: Add auto focus to hamburger and user menu dropdowns (#13165) · discourse/discourse@45dca79 · GitHub

3 curtidas

Sim, boa observação:

  • adicionamos um código com encadeamento opcional
  • reverteram-no
  • adicionamos novamente com o plugin babel correto

No entanto, há 5 dias fizemos o backport apenas do commit original, sem o plugin:

@pmusaraj Acredito que fazer o backport do plugin na versão estável também seja seguro, não acha?

8 curtidas

Sim, concordo, devemos fazer o backport. Vou trabalhar nisso mais tarde hoje.

10 curtidas

Isso já foi corrigido na versão estável (v2.7.4). O plugin proposal-optional-chaining do Babel agora está habilitado nessa versão e resolve o problema.

Obrigado @RGJ @j.jaffeux (e @vige pelo relatório original)!

12 curtidas

Aha, isso faz muito sentido! O código está na versão estável, mas o transpilador não. Obrigado por fazer o trabalho de detetive.

7 curtidas

Muito obrigado a todos os desenvolvedores envolvidos por corrigirem isso tão rapidamente!

Para constar, de acordo com meus testes, esse bug também afetava, em alguns casos, a versão mais recente do Microsoft Edge para Android (que, pelo que sei, não executa o Gecko).

6 curtidas

Você poderia ser tão gentil a ponto de adicionar a tag v2.7.4 real a esse lançamento?
Acabei de gastar meia hora tentando git checkout v2.7.4, o que acabou não existindo :sweat_smile:

3 curtidas

Desculpe pelo ocorrido. Agora está marcado.

7 curtidas