Alteração futura em componentes de tema 'use strict' - temas quebram após atualizar o Discourse

Agora estou na versão mais recente do commit (105634435f). Atualizo o Discourse aproximadamente uma vez por semana. Geralmente, não há problemas algum. Mas agora, vários componentes de tema falharam ao carregar. Ao dizer que falharam ao carregar, quero dizer que os componentes não aparecem mais. O recurso de log no painel de administração não mostra nada estranho que eu possa relacionar a esse problema. Muitos desses erros parecem incidentais e já ocorrem há um período mais longo. Como erros raros de MimeType e timeouts de DNS para o Google, que, novamente, ocorrem raramente.

Os seguintes plugins falharam ao carregar após a atualização:

  • DiscoTOC
  • discourse gifs
  • Discourse Jitsi
  • Hamburger Theme Selector
  • Nav Links Component
  • Tag Icons

Os únicos que funcionam são:

  • Discourse Kanban
  • Easy Footer

Se mais informações forem necessárias (acho que serão), ficarei feliz em fornecê-las. Por favor, oriente-me. Este post é mais um alerta de que algo está errado e que provavelmente se trata de uma mudança recente. Desculpe pela falta de informações…

Além disso, definições de variáveis JavaScript não estritas como:

xxx = 330;

em vez de

var xxx = 330;

levam a erros de “variável indefinida” no JS. Tivemos que alterar todas essas em nossos scripts.

Sim, há um problema com alguns componentes do tema. Estamos trabalhando em uma correção.

@pmusaraj muito obrigado. Boa sorte

Você sabe por que erros são lançados para variáveis JS não definidas estritamente em componentes? Isso é um erro de pós-processamento? Algo mudou aqui?

A alteração que causou esses problemas foi revertida há uma hora. Por favor, atualize para a versão mais recente se seu site foi afetado.

Para complementar o que o Falco disse, a alteração será reintroduzida nos próximos dias, mas antes de fazê-lo, vou garantir que todos os nossos temas/componentes oficiais sejam compatíveis com a mudança. Portanto, se você começar a ver o problema novamente com temas/componentes oficiais, atualizá-los deve resolver a questão.

Também farei uma publicação explicando como tornar temas/componentes compatíveis para pessoas que possuem componentes personalizados/privados em seus sites.

Peço desculpas pelo incômodo hoje.

Um dos nossos temas (um tema de banner) foi completamente sobrescrito para seu formato inicial e todas as alterações que havíamos feito foram perdidas. Não houve atualização para o tema desde 2018. Seria possível reverter as alterações?

Hmm, isso é realmente estranho. Você atualizou sua instância novamente para incluir Revert "FEATURE: Introduce theme/component QUnit tests (#12517)" (#12… · discourse/discourse@2b9ab3a · GitHub? Pode elaborar um pouco mais sobre o que você quer dizer com ‘formato inicial’? Você quer dizer que tinha alterações locais no JS/CSS do tema, mas agora todas essas alterações desapareceram?

Isso também explica o problema com as definições de variáveis em JS? Se sim, como?

Não acho que esse problema tenha a ver com esse recurso revertido. Tive o mesmo caso com um componente algumas semanas atrás, provavelmente por volta da funcionalidade do indicador de fork (que diz respeito a plugins, então :roll_eyes: provavelmente irrelevante também, mas eu tive que fazer um fork do componente para modificar as coisas).

É realmente estranho, nunca tivemos esse problema. Só apareceu com a versão mais recente. E estou me perguntando o que exatamente está acontecendo aqui.

Foi uma alteração complexa que também afetou o JS “inline” dos temas. Ela foi revertida e será reestruturada nos próximos dias antes de ser reimplantada. Você pode ler os detalhes em FEATURE: Introduce theme/component QUnit tests by OsamaSayegh · Pull Request #12517 · discourse/discourse · GitHub

Sim, essa alteração é a causa do problema que você viu no seu tema. Preciso entrar em alguns detalhes sobre o sistema de temas para explicar o que aconteceu. Existem duas maneiras de adicionar JS a um tema/componente do Discourse: a primeira usa tags <script type="text/discourse-plugin"> dentro de arquivos head_tag.html, e a outra usa arquivos JS independentes que ficam em um diretório chamado javascripts no seu tema/componente.

Antes da minha alteração de hoje, o JavaScript dentro dessas tags especiais era processado de uma forma que dependia da variável global Discourse, que não está disponível ao desenvolver no Discourse com o Ember CLI. Na alteração que implementei hoje, fiz com que o Discourse tratasse o JS dentro dessas tags como se viesse de arquivos independentes, o que nos permitiu evitar o uso da variável global Discourse.

Agora, um “efeito colateral” de tratar as tags de JavaScript como arquivos é que o JavaScript dentro delas terá a diretiva "use strict", algo que não ocorria antes. Essa diretiva é que causou os erros que você viu:

Recomendo que você mantenha todas as alterações que fez hoje no seu tema, pois as tags de JS voltarão a ser tratadas como arquivos independentes quando eu reintroduzir minha alteração.

Sim, eram apenas algumas definições preguiçosas no nosso código e tudo está funcionando bem depois de tornar as definições estritas.

De qualquer forma, obrigado por explicar isso com mais detalhes. Provavelmente útil para outros também.

Sim, todas as alterações sumiram, desde as mudanças no CSS e JS até mesmo as alterações no texto :sweat: Ou seja, meu tema voltou ao seu formato inicial, com textos como “Lorem ipsum dolor sit amet…”. De qualquer forma, vou usar o backup, mas foi algo estranho de acontecer após a atualização.

Olá @Pad_Pors,

Acho que seu problema está mais relacionado a isso. :slightly_smiling_face:

Sobre o outro tópico que você mencionou:

Então, acho que você não atualizou seu Discourse há algum tempo.