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

**URL:** https://meta.discourse.org/t/upcoming-theme-components-use-strict-change-themes-break-after-upgrading-discourse/185870
**Category:** Support
**Created:** [Avril 7, 2021, 12:20 UTC](https://meta.discourse.org/t/upcoming-theme-components-use-strict-change-themes-break-after-upgrading-discourse/185870 "2021-04-07T12:20:59Z")
**Posts on this page:** 18
**Page:** 1

<div class="post-metadata">

### Author: ![AquaL1te](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/aqual1te/32/201966_2.png) [@AquaL1te](https://meta.discourse.org/u/AquaL1te)
#### Post date: [Avril 7, 2021, 12:20 UTC](https://meta.discourse.org/t/upcoming-theme-components-use-strict-change-themes-break-after-upgrading-discourse/185870/1 "2021-04-07T12:20:59Z")

</div>

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…

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [Avril 7, 2021, 12:45 UTC](https://meta.discourse.org/t/upcoming-theme-components-use-strict-change-themes-break-after-upgrading-discourse/185870/2 "2021-04-07T12:45:39Z")

</div>

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.

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [Avril 7, 2021, 1:36 UTC](https://meta.discourse.org/t/upcoming-theme-components-use-strict-change-themes-break-after-upgrading-discourse/185870/3 "2021-04-07T13:36:34Z")

</div>

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

---

<div class="post-metadata">

### Author: ![Ludovik\_Dopierala](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ludovik_dopierala/32/193103_2.png) [@Ludovik\_Dopierala](https://meta.discourse.org/u/Ludovik_Dopierala)
#### Post date: [Avril 7, 2021, 1:49 UTC](https://meta.discourse.org/t/upcoming-theme-components-use-strict-change-themes-break-after-upgrading-discourse/185870/4 "2021-04-07T13:49:15Z")

</div>

@pmusaraj Merci beaucoup.  
Bonne chance

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [Avril 7, 2021, 2:49 UTC](https://meta.discourse.org/t/upcoming-theme-components-use-strict-change-themes-break-after-upgrading-discourse/185870/5 "2021-04-07T14:49:00Z")

</div>

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 ?

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [Avril 7, 2021, 3:57 UTC](https://meta.discourse.org/t/upcoming-theme-components-use-strict-change-themes-break-after-upgrading-discourse/185870/6 "2021-04-07T15:57:12Z")

</div>

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é.

---

<div class="post-metadata">

### Author: ![Osama](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/osama/32/98013_2.png) [@Osama](https://meta.discourse.org/u/Osama)
#### Post date: [Avril 7, 2021, 4:41 UTC](https://meta.discourse.org/t/upcoming-theme-components-use-strict-change-themes-break-after-upgrading-discourse/185870/7 "2021-04-07T16:41:09Z")

</div>

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.

---

<div class="post-metadata">

### Author: ![Pad\_Pors](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pad_pors/32/52016_2.png) [@Pad\_Pors](https://meta.discourse.org/u/Pad_Pors)
#### Post date: [Avril 7, 2021, 4:45 UTC](https://meta.discourse.org/t/upcoming-theme-components-use-strict-change-themes-break-after-upgrading-discourse/185870/8 "2021-04-07T16:45:06Z")

</div>

> [@Osama](#):
>
> Je publierai également un message pour expliquer comment rendre les thèmes/composants compatibles pour les personnes qui ont des composants personnalisés ou privés sur leurs sites.

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 ?

---

<div class="post-metadata">

### Author: ![Osama](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/osama/32/98013_2.png) [@Osama](https://meta.discourse.org/u/Osama)
#### Post date: [Avril 7, 2021, 4:54 UTC](https://meta.discourse.org/t/upcoming-theme-components-use-strict-change-themes-break-after-upgrading-discourse/185870/9 "2021-04-07T16:54:43Z")

</div>

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](https://github.com/discourse/discourse/commit/2b9ab3a0d91d1350188dd554764dbb4ce9837edd) ? 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 ?

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [Avril 7, 2021, 5:19 UTC](https://meta.discourse.org/t/upcoming-theme-components-use-strict-change-themes-break-after-upgrading-discourse/185870/10 "2021-04-07T17:19:53Z")

</div>

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

---

<div class="post-metadata">

### Author: ![Benjamin\_D](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/benjamin_d/32/277831_2.png) [@Benjamin\_D](https://meta.discourse.org/u/Benjamin_D)
#### Post date: [Avril 7, 2021, 5:26 UTC](https://meta.discourse.org/t/upcoming-theme-components-use-strict-change-themes-break-after-upgrading-discourse/185870/11 "2021-04-07T17:26:08Z")

</div>

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 🙄 probablement sans rapport non plus, mais j’ai dû faire un fork du composant pour apporter des modifications).

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [Avril 7, 2021, 5:31 UTC](https://meta.discourse.org/t/upcoming-theme-components-use-strict-change-themes-break-after-upgrading-discourse/185870/12 "2021-04-07T17:31:02Z")

</div>

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.

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [Avril 7, 2021, 6:24 UTC](https://meta.discourse.org/t/upcoming-theme-components-use-strict-change-themes-break-after-upgrading-discourse/185870/13 "2021-04-07T18:24:13Z")

</div>

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](https://github.com/discourse/discourse/pull/12517)

---

<div class="post-metadata">

### Author: ![Osama](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/osama/32/98013_2.png) [@Osama](https://meta.discourse.org/u/Osama)
#### Post date: [Avril 7, 2021, 6:42 UTC](https://meta.discourse.org/t/upcoming-theme-components-use-strict-change-themes-break-after-upgrading-discourse/185870/14 "2021-04-07T18:42:37Z")

</div>

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 :

> [@Terrapop](#):
>
> `xxx = 330;`
> 
> au lieu de
> 
> `var xxx = 330;`
> 
> entraîne des erreurs JS « variable non définie ». Nous avons dû modifier tous ces cas dans nos scripts.

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.

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [Avril 7, 2021, 7:21 UTC](https://meta.discourse.org/t/upcoming-theme-components-use-strict-change-themes-break-after-upgrading-discourse/185870/15 "2021-04-07T19:21:52Z")

</div>

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.

---

<div class="post-metadata">

### Author: ![Pad\_Pors](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pad_pors/32/52016_2.png) [@Pad\_Pors](https://meta.discourse.org/u/Pad_Pors)
#### Post date: [Avril 8, 2021, 5:16 UTC](https://meta.discourse.org/t/upcoming-theme-components-use-strict-change-themes-break-after-upgrading-discourse/185870/16 "2021-04-08T05:16:31Z")

</div>

> [@Osama](#):
>
> Peux-tu préciser un peu ce que tu entends par « format initial » ? Veux-tu dire que tu avais effectué des modifications locales sur le JS/CSS du thème, mais que toutes ces modifications ont maintenant disparu ?

Oui, toutes les modifications ont disparu, des changements CSS et JS jusqu’aux modifications de texte 😓 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.

---

<div class="post-metadata">

### Author: ![Don](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/don/32/228726_2.png) [@Don](https://meta.discourse.org/u/Don)
#### Post date: [Avril 8, 2021, 6:40 UTC](https://meta.discourse.org/t/upcoming-theme-components-use-strict-change-themes-break-after-upgrading-discourse/185870/17 "2021-04-08T06:40:17Z")

</div>

Salut @Pad_Pors,

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

> [@Restrict editing of remote themes](https://meta.discourse.org/t/restrict-editing-of-remote-themes/170051?u=dodesz):
>
> For quite a while, best practice has been to avoid editing themes installed from a remote Git repository locally on Discourse. Any changes to theme code or uploads get wiped out when updating the theme from the remote repo. In this commit, we’ve removed the ability to locally edit a remote theme and are now enforcing this best practice in Discourse. What happens if I have a remote theme with local changes? Nothing at this point. Your theme stays as is until you remove it or update it from re…

Concernant l’autre sujet que tu as mentionné :

> [@Pad\_Pors](#):
>
> Il y avait auparavant un bouton « modifier le thème », mais maintenant il demande de « Si vous souhaitez modifier ce thème, vous devez [soumettre une modification sur son dépôt](https://github.com/discourse/discourse-two-columns-banner.git) ».

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

---

<div class="post-metadata">

### Author: ![Osama](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/osama/32/98013_2.png) [@Osama](https://meta.discourse.org/u/Osama)
#### Post date: [Avril 13, 2021, 9:48 UTC](https://meta.discourse.org/t/upcoming-theme-components-use-strict-change-themes-break-after-upgrading-discourse/185870/19 "2021-04-13T09:48:41Z")

</div>

Suite ici :

> [@Upcoming core changes that may break some themes/components (April 12)](https://meta.discourse.org/t/upcoming-core-changes-that-may-break-some-themes-components-april-12/186252?u=osama):
>
> Next week I’m going to merge [this PR](https://github.com/discourse/discourse/pull/12661) that allows themes and components to have QUnit tests, but it also changes how themes JavaScript is processed/transpiled by Discourse. Making those changes in a backward-compatible manner is very difficult without reworking lots of code in core (which may very well introduce other backward-incompatible changes), so the changes may break the JavaScript of your themes/components when you upgrade your site. In this post I’m going to explain what the changes are…
