Changement à venir de 'use strict' pour les composants de thème - les thèmes se cassent après la mise à niveau de Discourse

Je suis maintenant sur la dernière version du commit (105634435f). Je mets à jour Discourse environ une fois par semaine. Habituellement, aucun problème ne se pose. Mais cette fois, plusieurs composants de thème ont échoué à se charger. Par « échec de chargement », j’entends que les composants n’apparaissent plus. La fonctionnalité de journal dans le panneau d’administration ne montre rien d’étrange que je puisse relier à ce problème. Beaucoup de ces erreurs semblent fortuites et surviennent déjà depuis un certain temps. Par exemple, des erreurs MimeType rares et des délais d’attente pour les requêtes DNS vers Google ; là encore, elles se produisent rarement.

Ces plugins ne se chargent plus après la mise à jour :

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

Les seuls qui fonctionnent encore sont :

  • Discourse Kanban
  • Easy Footer

Si davantage d’informations sont nécessaires (ce qui est probable), je suis heureux de vous les fournir ; veuillez me donner les instructions nécessaires. Ce message est avant tout pour signaler qu’il y a un problème, probablement dû à un changement récent. Désolé pour le manque d’informations…

En outre, les définitions de variables JavaScript non strictes comme :

xxx = 330;

au lieu de

var xxx = 330;

entraînent des erreurs JS « variable non définie ». Nous avons dû modifier tous ces cas dans nos scripts.

Oui, il y a un problème avec certains composants du thème ; nous travaillons sur une correction.

@pmusaraj Merci beaucoup.
Bonne chance

Savez-vous pourquoi des erreurs sont levées pour les variables JS non strictement définies dans les composants ? S’agit-il d’une erreur de post-traitement ? Y a-t-il eu des changements ici ?

La modification à l’origine de ces problèmes a été annulée il y a une heure. Veuillez mettre à jour vers la dernière version si votre site a été affecté.

Pour compléter ce que Falco a dit, le changement sera réintégré dans les prochains jours. Cependant, avant de le rétablir, je m’assurerai que tous nos thèmes/composants officiels sont compatibles avec cette modification. Ainsi, si vous remarquez à nouveau le problème avec les thèmes/composants officiels, les mettre à jour devrait le résoudre.

Je publierai également un message expliquant comment rendre les thèmes/composants compatibles pour les personnes disposant de composants personnalisés/privés sur leurs sites.

Veuillez nous excuser pour la gêne occasionnée aujourd’hui.

L’un de nos thèmes (un thème de bannière) a été complètement réinitialisé à son format initial et tous les changements que nous avions apportés ont été perdus. Il n’y avait eu aucune mise à jour pour ce thème depuis 2018. Serions-nous en mesure de restaurer les modifications ?

Hmm, c’est vraiment étrange. Avez-vous à nouveau mis à jour votre instance pour inclure Revert "FEATURE: Introduce theme/component QUnit tests (#12517)" (#12… · discourse/discourse@2b9ab3a · GitHub ? Pourriez-vous préciser un peu ce que vous entendez par « format initial » ? Voulez-vous dire que vous aviez des modifications locales sur le JS/CSS du thème, mais que toutes ces modifications ont maintenant disparu ?

Cela explique-t-il aussi le problème avec les définitions de variables JS ? Si oui, comment ?

Je ne pense pas que ce problème soit lié à cette fonctionnalité annulée. J’ai rencontré le même cas avec un composant il y a quelques semaines, probablement autour de la fonctionnalité de l’indicateur de fork (qui concerne les plugins, donc :roll_eyes: probablement sans rapport non plus, mais j’ai dû faire un fork du composant pour apporter des modifications).

C’est vraiment étrange, nous n’avions jamais eu ce problème. Il est apparu avec la dernière version. Et je me demande ce qui se passe exactement ici.

Il s’agissait d’un changement complexe qui a également affecté le JavaScript « inline » des thèmes. Il a été annulé et sera retravaillé dans les prochains jours avant d’être réintégré. Vous pouvez consulter les détails sur FEATURE: Introduce theme/component QUnit tests by OsamaSayegh · Pull Request #12517 · discourse/discourse · GitHub

Oui, ce changement est à l’origine du problème que vous avez constaté dans votre thème. Je dois entrer dans un peu plus de détails sur le système de thèmes pour expliquer ce qui s’est passé. Il existe deux façons d’ajouter du JS à un thème ou un composant Discourse : la première utilise des balises <script type="text/discourse-plugin"> à l’intérieur de fichiers head_tag.html, et la seconde utilise des fichiers JS autonomes situés dans un répertoire nommé javascripts de votre thème ou composant.

Avant mon changement d’aujourd’hui, le JavaScript contenu dans ces balises script spéciales était traité d’une manière qui dépendait de la variable globale Discourse, laquelle n’est pas disponible lors du développement sur Discourse avec Ember CLI. Dans le changement que j’ai poussé aujourd’hui, j’ai fait en sorte que Discourse traite le JS contenu dans ces balises comme s’il provenait de fichiers autonomes, ce qui nous a permis d’éviter d’utiliser la variable globale Discourse.

Or, un « effet secondaire » du fait de traiter les balises JavaScript comme des fichiers est que le JavaScript à l’intérieur de ces balises aura désormais la directive "use strict", ce qui n’était pas le cas auparavant. Cette directive est à l’origine des erreurs que vous avez constatées :

Je vous recommande de conserver tous les changements que vous avez apportés aujourd’hui dans votre thème, car les balises JS seront à nouveau traitées comme des fichiers autonomes lorsque je rétablirai mon changement.

Oui, c’étaient juste quelques définitions paresseuses dans notre code, et tout fonctionne bien maintenant que les définitions sont strictes.

En tout cas, merci de l’avoir expliqué plus en détail. Cela devrait probablement être utile à d’autres aussi.

Oui, toutes les modifications ont disparu, des changements CSS et JS jusqu’aux modifications de texte :sweat: c’est-à-dire que mon thème est revenu à son format initial avec des textes comme « Lorem ipsum dolor sit amet… ». Quoi qu’il en soit, je vais utiliser la sauvegarde, mais c’était étrange que cela se produise après la mise à niveau.

Salut @Pad_Pors,

Je pense que ton problème est plutôt lié à ceci. :slightly_smiling_face:

Concernant l’autre sujet que tu as mentionné :

Donc je pense que tu n’as pas mis à jour ton Discourse depuis un moment.