Modifica imminente di 'use strict' per i componenti del tema - i temi si rompono dopo l'aggiornamento di Discourse

Sono ora all’ultimo commit (105634435f). Aggiorno Discourse circa una volta a settimana. Di solito non ci sono problemi. Ma ora diversi componenti del tema non riescono a caricarsi. Con “non riescono a caricarsi” intendo che i componenti non vengono più visualizzati. La funzionalità dei log nel pannello di amministrazione non mostra nulla di strano che possa collegare a questo problema. Molti di questi errori sembrano casuali e si verificano già da un periodo di tempo più lungo. Come errori rari di MimeType e timeout DNS verso Google; anche questi si verificano raramente.

Questi plugin non riescono a caricarsi dopo l’aggiornamento:

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

Quelli che funzionano sono solo:

  • Discourse Kanban
  • Easy Footer

Se servono più informazioni (immagino di sì), sono felice di fornirle: vi prego di indicarmi cosa serve. Questo post è più un avviso che qualcosa non va, e probabilmente è dovuto a una modifica recente. Scusate per la mancanza di informazioni…

Inoltre, le definizioni di variabili JavaScript non rigorose come:

xxx = 330;

invece di

var xxx = 330;

causeranno errori JS “variabile non definita”. Abbiamo dovuto modificare tutte queste nei nostri script.

Sì, c’è un problema con alcuni componenti del tema; stiamo lavorando a una soluzione.

@pmusaraj grazie mille.
Buona fortuna

Sai perché vengono lanciati errori per le variabili JS non definite in modo rigoroso nei componenti? Si tratta di un errore di post-elaborazione? È cambiato qualcosa in questo ambito?

La modifica che ha causato questi problemi è stata annullata un’ora fa; se il tuo sito ne è stato interessato, ti preghiamo di aggiornare all’ultima versione.

Per aggiungere a quanto detto da Falco, la modifica verrà reintrodotta nei prossimi giorni, ma prima di inserirla nuovamente mi assicurerò che tutti i nostri temi/componenti ufficiali siano compatibili con la modifica. Quindi, se inizierai a riscontrare nuovamente il problema con i temi/componenti ufficiali, aggiornandoli dovresti risolvere il problema.

Inoltre, pubblicherò un post per spiegare come rendere i temi/componenti compatibili per coloro che hanno componenti personalizzati/privati sui loro siti.

Mi scuso per l’inconveniente di oggi.

Uno dei nostri temi (un tema banner) è stato completamente sovrascritto nel suo formato iniziale e tutte le modifiche che avevamo apportato sono andate perse. Non c’era stato alcun aggiornamento per il tema dal 2018. Saremmo in grado di ripristinare le modifiche?

Hmm, è davvero strano. Hai aggiornato di nuovo la tua istanza per includere Revert "FEATURE: Introduce theme/component QUnit tests (#12517)" (#12… · discourse/discourse@2b9ab3a · GitHub? Potresti spiegare meglio cosa intendi per ‘formato iniziale’? Vuoi dire che avevi delle modifiche locali al JS/CSS del tema, ma ora tutte quelle modifiche sono sparite?

Questo spiega anche il problema con le definizioni di variabili in JS? Se sì, come?

Non credo che questo problema abbia a che fare con questa funzionalità ripristinata. Ho avuto lo stesso caso con un componente alcune settimane fa, probabilmente intorno alla funzionalità dell’indicatore di fork (che riguarda i plugin, quindi :roll_eyes: probabilmente irrilevante anch’essa, ma ho dovuto comunque forkare il componente per apportare delle modifiche).

È davvero strano, non abbiamo mai avuto quel problema. È emerso solo con l’ultima versione. E mi chiedo esattamente cosa stia succedendo qui.

È stato un cambiamento complesso che ha coinvolto anche il JS “inline” dei temi. È stato annullato e verrà ripensato nei prossimi giorni prima di essere riproposto. Puoi leggere i dettagli su FEATURE: Introduce theme/component QUnit tests by OsamaSayegh · Pull Request #12517 · discourse/discourse · GitHub

Sì, quella modifica è la causa del problema che hai riscontrato nel tuo tema. Devo entrare in un po’ di dettaglio sul sistema dei temi per spiegare cosa è successo. Ci sono due modi per aggiungere JS a un tema/componente di Discourse: il primo utilizza tag <script type="text/discourse-plugin"> all’interno di file head_tag.html, mentre il secondo utilizza file JS autonomi che risiedono in una directory chiamata javascripts nel tuo tema/componente.

Prima della mia modifica di oggi, il JavaScript all’interno di quei tag script speciali veniva elaborato in un modo che faceva affidamento sulla variabile globale Discourse, la quale non è disponibile quando si sviluppa su Discourse con Ember CLI. Con la modifica che ho inviato oggi, ho fatto sì che Discourse trattasse il JS all’interno di quei tag come se provenisse da file autonomi, il che ci ha permesso di evitare l’uso della variabile globale Discourse.

Ora, un “effetto collaterale” del trattare i tag JavaScript come file è che il JavaScript all’interno dei tag avrà la direttiva "use strict", cosa che non aveva in precedenza, e quella direttiva causa gli errori che hai visto:

Ti consiglio di mantenere tutte le modifiche che hai apportato oggi nel tuo tema, perché i tag JS verranno nuovamente trattati come file autonomi quando reintrodurrò la mia modifica.

Sì, erano solo alcune definizioni pigre nel nostro codice e ora tutto funziona correttamente dopo aver reso le definizioni rigorose.

Comunque, grazie per averlo spiegato in modo più dettagliato. Probabilmente sarà utile anche ad altri.

Sì, tutte le modifiche sono andate perse, dalle modifiche CSS e JS fino a quelle al testo :sweat: cioè il mio tema è tornato al suo formato iniziale con testi come “Lorem ipsum dolor sit amet…”. Comunque userò il backup, ma è stato strano che accadesse dopo l’aggiornamento.

Ciao @Pad_Pors,

Penso che il tuo problema sia più legato a questo. :slightly_smiling_face:

Per quanto riguarda l’altro argomento che hai menzionato:

Quindi penso che tu non abbia aggiornato il tuo Discourse da un po’ di tempo.