Mise à niveau de Discourse vers Ember 4

Nous souhaitons mettre à jour la version d’Ember utilisée dans Discourse.

Actuellement, nous sommes à la version 3.15, et nous aimerions passer à la version 4.1.

Nous nous sommes fixé pour objectif de terminer ce travail d’ici la fin de l’année. Veuillez noter que ce sujet constitue une feuille de route, et que tous les plans et estimations sont indicatifs. Ce sujet n’a pas pour but d’accueillir des discussions approfondies sur des mises à jour ou des changements particuliers. Gardons donc la conversation ici un peu ciblée. Les questions sur la façon dont ces mises à jour affecteront votre site/plugin/thème sont hors sujet. Les changements prévus concernent à 100 % le front-end (application Ember).

Nous ferons extrêmement attention aux changements que nous introduisons. Tous les plugins/thèmes officiels seront mis à jour (y compris tout travail personnalisé réalisé par CDCK pour ses clients). Nous enverrons également des PR pour mettre à jour tous les plugins/thèmes non officiels populaires.

Pas de souci si vous avez un plugin/thème personnalisé que vous avez créé pour votre site. Nous ajouterons des avertissements de dépréciation et créerons les annonces nécessaires en temps opportun pour vous donner suffisamment de temps pour effectuer les modifications requises. Nous essaierons également de vous guider dans ces changements si nécessaire.

Commençons par les objectifs. Nous voulons évidemment atteindre la version la plus récente disponible, mais nous devons définir des objectifs intermédiaires entre maintenant et notre destination finale.

Nous prévoyons de faire des mises à jour incrémentielles. Au lieu d’une mise à jour majeure vers 4.1, nous allons diviser ce travail en six étapes. Chaque étape se concentre sur une mise à jour Ember.

Étape Taille Mises à jour
1 size-l Ember 3.15 → Ember 3.16
2 size-m Ember 3.16 → Ember 3.25
3 size-xl Ember 3.25 → Ember 3.26 (Partie 1 - Général)
Ember 3.25 → Ember 3.26 (Partie 2 - Modèles)
Ember 3.25 → Ember 3.26 (Partie 3 - jQuery)
Ember 3.25 → Ember 3.26 (Partie 4 - Travaux préparatoires Octane)
Ember 3.25 → Ember 3.26 (Partie 5 - Octane)
4 size-l Ember 3.26 → Ember 3.27 (Partie 1 - Général)
Ember 3.26 → Ember 3.27 (Partie 2 - RenderTemplate)
Ember 3.26 → Ember 3.27 (Partie 3 - Composants intégrés hérités)
5 size-s Ember 3.27 → Ember 3.28
6 size-s Ember 3.28 → Ember 4.1

Le choix de ces versions spécifiques est entièrement basé sur les dépréciations et la quantité de travail qu’elles introduisent - et le risque implicite.

Décomposons-les donc davantage pour plus de clarté.

Dépréciations par mise à jour

Étape 1 (size-l)

Ember 3.15 → Ember 3.16

Cette mise à jour n’introduit qu’une dépréciation.

  1. Utiliser le résolveur ember-CLI plutôt que le résolveur global hérité :link: - jusqu’à : 4.0.0 - size-l

    Discourse possède son propre résolveur personnalisé qui étend actuellement Ember.DefaultResolver.

    La correction recommandée consiste à se passer de tout résolveur personnalisé et à utiliser le résolveur Ember-CLI. C’est plus facile à dire qu’à faire car nous avons pas mal de logique personnalisée pour gérer les plugins et les thèmes.

    Un compromis qui fonctionne consiste à étendre le résolveur Ember-CLI plutôt que d’étendre Ember.DefaultResolver.

Étape 2 (size-m)

Ember 3.16 → Ember 3.25

Cette mise à jour introduit huit dépréciations.

  1. @ember/string#loc et {{loc}} :link: jusqu’à : 4.0.0 - :heavy_check_mark:

  2. Without for - Dépréciation intégrée d’Ember :link: jusqu’à : 4.0.0 - :heavy_check_mark:

  3. Without since - Dépréciation intégrée d’Ember :link: jusqu’à : 4.0.0 - :heavy_check_mark:

  4. tryInvoke from @ember/utils :link: jusqu’à : 4.0.0 - :heavy_check_mark:

  5. Meta Destruction APIs :link: - jusqu’à : 3.25.0 - :heavy_check_mark:

    Nous n’utilisons aucun de ceux-ci, donc il n’y a rien à faire ici.

  1. Utiliser Ember getter et vérifier explicitement pour undefined :link: - jusqu’à : 4.0.0 - size-s

    C’est une dépréciation simple. Nous devons simplement supprimer getWithDefault dans notre base de code, et il n’y a que quelques endroits où nous l’utilisons.

  2. Extensions de prototype de chaîne :link: - jusqu’à : 4.0.0 - size-m

    C’est aussi un remplacement simple et à faible risque, mais nous utilisons le prototype de chaîne étendu d’Ember en assez d’endroits. D’après une vérification rapide, je pense que nous avons environ < 100 endroits où nous faisons cela entre le noyau et les plugins/thèmes. Une fois que nous aurons mis à jour ceux-ci, nous devrons également empêcher Ember d’étendre ce prototype avec quelque chose comme ceci.

    EXTEND_PROTOTYPES: {
       String: false
    }
    

    dans notre fichier environment.

  3. Importation de htmlSafe et isHTMLSafe depuis @ember/string :link: - jusqu’à : 4.0.0 - size-m

    Il y a beaucoup de chevauchement entre cela et #7 dans cette mise à jour, et cela devrait être simple et à faible risque.

Étape 3 (size-xl)

La mise à niveau de 3.25 à 3.26 est assez complexe. C’est là que nous faisons la plupart du “rattrapage”. Il y a seize dépréciations au total. Nous allons diviser cette mise à jour en cinq parties - où nous ne faisons qu’une augmentation de version après que toutes les dépréciations ont été traitées.

Ember 3.25 → Ember 3.26 (Partie 1 - Général)

Cette partie traite de neuf dépréciations qui sont relativement faciles à gérer.

  1. Observateurs de tableau :link: - jusqu’à : 4.0.0 - :heavy_check_mark:

  2. Capacités du gestionnaire de composants :link: - jusqu’à : 4.0.0 - :heavy_check_mark:

  3. Capacités du gestionnaire de modificateurs :link: - jusqu’à : 4.0.0 - :heavy_check_mark:

  4. Fonctionnalité optionnelle : application-template-wrapper :link: - jusqu’à : 4.0.0 - :heavy_check_mark:

  5. classBinding et classNameBindings en tant qu’arguments dans les modèles :link: - jusqu’à : 4.0.0 - :heavy_check_mark:

    Rien à faire ici ; nous n’utilisons pas ceux-ci.

  1. Méthodes de transition des routes et contrôleurs :link: - jusqu’à : 5.0.0 - size-m

    Cette dépréciation supprime quelques méthodes des routes et controllers. Cela peut sembler être un changement complexe, mais cela devrait être simple. Nous devrons simplement injecter le Router en tant que service et les appeler depuis là-bas - si nécessaire. La partie délicate est que nous les utilisons en de nombreux endroits, et ils doivent tous être mis à jour.

  2. Politique de support des navigateurs :link: - jusqu’à : 4.0.0 - size-s

    ~~Ce devrait être un changement relativement simple. Ember ne supportera plus IE11 à partir de 4.0. La bonne chose ici est que nous ne le supportons plus depuis longtemps de toute façon. La seule chose que nous devons changer est d’arrêter de transpiler pour IE11 en production.
    discourse/app/assets/javascripts/discourse/config/targets.js at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

    J’ai fait quelques tests de base, et ce changement nous fera économiser environ 60ko (gzip) ou ~6% de nos bundles principaux et fournisseurs dans les installations Ember-CLI en production.

  3. {{hasBlock}} et {{hasBlockParams}} :link: - jusqu’à : 4.0.0 - size-s

    Nous les utilisons en quelques endroits. C’est un renommage simple et à faible risque.

  4. Assistant {{with}} :link: - jusqu’à : 4.0.0 - size-s

    Nous l’utilisons rarement, mais il faut quand même le corriger. Nous devons simplement les remplacer et utiliser {{let}} ou une combinaison de {{if}} / {{else}}

Ember 3.25 → Ember 3.26 (Partie 2 - Modèles)

Cette partie se concentrera principalement sur les dépréciations impliquant les modèles .hbs. Il y a trois dépréciations sur lesquelles nous devons nous concentrer ici.

  1. Recherche de repli de propriété :link: - jusqu’à : 4.0.0 - size-l

    À partir d’Ember 4.0, cela ne fonctionnera plus.

    Bonjour, {{name}} !
    

    Si nous avons une propriété dans un modèle, nous devons la rechercher avec un this précédent comme ceci

    Bonjour, {{this.name}} !
    

    Nous devrons faire cela pour tous nos modèles. Il y a des moyens de réduire la douleur ici. Nous pouvons essayer le ember-no-implicit-this-codemod et voir jusqu’où cela nous mène.

    Je suis en faveur de limiter les changements à 1 fichier par PR. Cela facilite la revue - et l’annulation si quelque chose se passe mal.

  2. Accès aux arguments nommés via {{attrs}} :link: - jusqu’à : 4.0.0 size-xl

    L’objet {{attrs}} sera supprimé dans Ember 4.0. Le changement lui-même est très simple, et l’exemple d’Ember est plutôt agréable.

    Avant :

    {{attrs.foo}}
    {{this.attrs.foo.bar}}
    {{deeply (nested attrs.foobar.baz)}}
    

    Après :

    {{@foo}}
    {{@foo.bar}}
    {{deeply (nested @foobar.baz)}}
    

    Nous devrons faire cela pour tous nos modèles. Nous pouvons combiner ce changement avec la conversion des modèles en syntaxe à chevrons. Je suis un grand fan des chevrons car ils sont beaucoup plus proches de la syntaxe standard des composants web personnalisés.

    Une chose qui pourrait accélérer notre progression ici est le ember-angle-brackets-codemod. Nous devrons expérimenter avec cela et voir jusqu’où cela nous mène. Il gère la dépréciation et nous donne une belle syntaxe à chevrons.

    Similaire à #1 dans cette partie, je préfère également corriger et tester un modèle par PR.

  3. Arguments positionnels <LinkTo> :link: - jusqu’à : 4.0.0 - size-m

    C’est aussi une dépréciation qui vise à réduire la confusion. Il y a quelques endroits où nous utilisons des arguments positionnels sur link-to. Nous pouvons les corriger comme ceci

    Avant :

    {{link-to "À propos de nous" "about"}}
    {{#link-to "about"}}À propos de nous{{/link-to}}
    {{#link-to "post" @post}}Lire {{@post.title}}...{{/link-to}}
    

    Après (avec chevrons) :

     <LinkTo @route="about">À propos de nous</LinkTo>
     <LinkTo @route="about">À propos de nous</LinkTo>
     <LinkTo @route="post" @model={{@post}}>Lire {{@post.title}}...</LinkTo>
    

Ember 3.25 → Ember 3.26 (Partie 3 - jQuery)

Il n’y a pas grand-chose que je puisse dire à ce sujet que vous ne sachiez déjà. Les nouvelles applications Ember n’utilisent pas jQuery, et il sera supprimé dans Ember 4.0.

Dans cette partie, nous nous concentrerons sur une dépréciation.

  1. Fonctionnalité optionnelle : jquery-integration :link: - jusqu’à : 4.0.0 - size-xl

    Au cours des dernières années, nous avons fait beaucoup de progrès pour réduire notre utilisation de jQuery. Il y a encore des endroits où nous en avons besoin, en particulier dans le compositeur et comme dépendance pour certaines bibliothèques fournisseurs que nous utilisons. Je ne veux pas entrer dans les détails de ce changement ici. En bref, nous devrons nous éloigner de l’utilisation de jQuery.

    Cependant, je voudrais souligner que même si nous nous débarrassons de jQuery PARTOUT, nous devrions quand même garder cette option définie sur true jusqu’à ce que nous soyons prêts pour Ember 4.0. Nous avons besoin d’un plan pour faciliter la transition des sites avec des thèmes/plugins personnalisés que nous ne contrôlons pas. En d’autres termes, faisons le travail mais vivons avec l’avertissement de dépréciation concernant la désactivation de l’option.

Ember 3.25 → Ember 3.26 (Partie 4 - Travaux préparatoires Octane)

Dans cette partie, nous devrions nous concentrer sur la préparation de nos fichiers pour Octane. Nous traiterons deux dépréciations.

  1. Fonctionnalité optionnelle : template-only-glimmer-components :link: - jusqu’à : 4.0.0 - size-m

    C’est un changement simple en théorie, mais il y a du travail implicite que nous devons faire avant de pouvoir basculer cette option.

    Nous devons nous assurer que nos composants actuels basés uniquement sur des modèles fonctionnent avec la sémantique Glimmer. J’ai fait quelques tests, et nos tests ont échoué avec cette option activée. Voici une liste exemple de certains composants basés uniquement sur des modèles que nous avons dans le noyau

    - app/templates/components/activation-email-form.hbs
    - app/templates/components/cancel-link.hbs
    - app/templates/components/categories-with-featured-topics.hbs
    - app/templates/components/category-name-fields.hbs
    - app/templates/components/color-input.hbs
    - app/templates/components/custom-html-container.hbs
    - app/templates/components/emoji-group-buttons.hbs
    - app/templates/components/emoji-group-sections.hbs
    - app/templates/components/empty-state.hbs
    - app/templates/components/ip-lookup.hbs
    - app/templates/components/modal-footer-close.hbs
    - app/templates/components/popup-menu.hbs
    - app/templates/components/reviewable-created-by-name.hbs
    - app/templates/components/reviewable-created-by.hbs
    - app/templates/components/reviewable-field-editor.hbs
    - app/templates/components/reviewable-field-text.hbs
    - app/templates/components/reviewable-field-textarea.hbs
    - app/templates/components/reviewable-field.hbs
    - app/templates/components/reviewable-flagged-post.hbs
    - app/templates/components/reviewable-post-header.hbs
    - app/templates/components/reviewable-post.hbs
    - app/templates/components/reviewable-scores.hbs
    - app/templates/components/reviewable-tags.hbs
    - app/templates/components/reviewable-topic-link.hbs
    - app/templates/components/score-value.hbs
    - app/templates/components/selected-posts.hbs
    - app/templates/components/subcategories-with-featured-topics.hbs
    - app/templates/components/text-overflow.hbs
    - app/templates/components/user-fields/confirm.hbs
    - app/templates/components/user-fields/dropdown.hbs
    - app/templates/components/user-fields/multiselect.hbs
    - app/templates/components/user-fields/text.hbs
    - app/templates/components/user-profile-avatar.hbs
    - app/templates/components/user-summary-users-list.hbs
    

    Nous devrons également vérifier nos modèles Admin/thème/plugin et nous assurer que tout fonctionne avant de publier cette option.

    Au premier abord, je ne suis pas exactement sûr de la façon dont nos modèles .hbr bruts s’intégreront à cela. Cependant, @david a travaillé sur des listes de sujets basées sur Glimmer. Donc, peut-être pouvons-nous nous passer complètement des modèles bruts.

  2. Injections implicites :link: - jusqu’à : 4.0.0 size-xl

    Nous utilisons des injections implicites partout. Nous faisons cela dans un initialiseur comme ceci
    discourse/app/assets/javascripts/discourse/app/pre-initializers/inject-discourse-objects.js at ac79c5efc61d259705eeb487ca21d0ec3c535807 · discourse/discourse · GitHub

    Ember s’éloigne des injections implicites. La voie privilégiée est de convertir autant de nos objets que possible en services et de les injecter explicitement là où ils sont nécessaires. Bien sûr, il pourrait y avoir quelques choses où un service n’est pas idéal. Dans ces cas, nous pouvons rechercher ces objets directement lorsqu’ils sont nécessaires comme ceci

    getOwner(this).lookup('thing:main')
    

    Une autre option que nous avons (selon les implications de performance) est d’encapsuler les Classes Ember avec notre propre Classe Discourse. Nous utiliserions ensuite notre Classe dans toute l’application. Un peu comme nous le faisons avec la Classe GlimmerComponent
    discourse/app/assets/javascripts/discourse/app/components/glimmer.js at fa0c796baf9a7f64a3b27823b1aa4b370a74c3eb · discourse/discourse · GitHub. Cela rendrait cette tâche size-l ou même size-m

    Dans tous les cas, ce changement nécessitera une réflexion.

Ember 3.25 → Ember 3.26 (Partie 5 - Octane)

C’est le dernier sprint de la mise à niveau 3.25 → Ember 3.26. Nous n’aurons qu’une dépréciation restante à ce stade, mais c’en est une importante.

  1. Édition : Classic :link: - jusqu’à : 4.0.0 - size-xl

    Avant de basculer notre version vers Octane, j’aimerais prendre le temps de convertir nos Classes en Classes natives et nos composants en composants Glimmer. Il y aura un peu de douleur impliquée, mais cela vaut la peine. Le ember-native-class-codemod devrait atténuer une partie de cette douleur. Nous verrons jusqu’où cela nous mène.

    Il y a beaucoup de considérations et de problèmes de flux de travail à garder à l’esprit. La seule chose que je veux souligner est que cela suivra le même flux que j’ai mentionné pour les modèles - corriger et tester 1 composant par PR.

Étape 4

La mise à jour Ember 3.26 → Ember 3.27 introduit douze dépréciations. Je propose de les diviser en trois parties. Nous ferons l’augmentation de version après que toutes les dépréciations auront été traitées.

Ember 3.26 → Ember 3.27 (partie 1 - Général)

  1. Réouverture de la super classe de composant classique :link: - jusqu’à : 4.0.0 - :heavy_check_mark:

  2. Plugins de compilation de modèles basés sur des classes :link: - jusqu’à : 4.0.0 - :heavy_check_mark:

  3. Argument LinkTo @disabled-when :link: - jusqu’à : 4.0.0 - :heavy_check_mark:

    Je ne pense pas que nous utilisions aucun de ceux-ci, donc il n’y a rien à faire ici.

  1. Déprécier Route#disconnectOutlet :link: - jusqu’à : 4.0.0 - size-s

    Nous ne faisons cela qu’en un endroit. C’est le build-category-route, et cela devrait être simple à corriger.

  2. Invocation d’assistants sans arguments et parenthèses dans des positions d’arguments nommés :link: - jusqu’à : 4.0.0 - size-s

    Je ne pense pas que nous fassions cela nulle part, mais je confirmerai quand le moment sera venu. Essentiellement, appeler un assistant sans lui passer d’arguments.

    Même si nous utilisons quelque chose comme cela, nous n’aurions besoin que d’ajouter des parenthèses. Donc, cela

    <SomeComponent @arg={{someHelper}} />
    

    devient

    <SomeComponent @arg={{(someHelper)}} />
    

    notez les parenthèses autour de someHelper

  3. Boucle d’exécution et accès par point aux calculés :link: - jusqu’à : 4.0.0 - size-m

    Nous utilisons . pour accéder aux fonctions computed dans notre addon decorators. Ils ressemblent à ceci, par exemple
    discourse/app/assets/javascripts/discourse-common/addon/utils/decorators.js at b05fddaa7ce3968ffc70cd8d4bf290e15d06eb11 · discourse/discourse · GitHub

    Nous avons aussi quelques cas isolés ici et là. Pour autant que je sache, corriger ceux-ci consiste principalement à corriger la façon dont nous les importons.

    Donc, computed.filter devrait être importé comme ceci à la place.

    import { filter } from '@ember/object/computed';
    

    Notre version de l’addon fournisseur externe buffered-proxy utilise . pour accéder aux fonctions computed ; nous devrons le mettre à jour.

    Nous utilisons aussi . pour accéder aux fonctions run en quelques endroits. Cela dit, la même correction s’applique. Nous devons mettre à jour la façon dont nous les importons. Je pense que les thèmes et plugins en particulier pourraient avoir pas mal d’endroits où nous faisons cela avec run

  4. Déprécier le Global Ember :link: - jusqu’à : 4.0.0 - (#size ?)

    Ember ne sera plus disponible dans le contexte global après 4.0. Il est difficile d’estimer la quantité de travail/impact ici sans un examen plus approfondi. Cela dit, je sais que @cvx a fait beaucoup de travail pour se débarrasser de ce modèle.

Ember 3.26 → Ember 3.27 (partie 2 - renderTemplate)

Cette partie se concentrera uniquement sur une dépréciation.

  1. Déprécier Route#renderTemplate :link: - jusqu’à : 4.0.0 - size-l

    En un mot, nous ne pouvons pas utiliser de sorties nommées dans Ember 4.0. Donc, cela ne fonctionnera pas.

    {{outlet "thing"}}
    

    Nous utilisons renderTemplate en presque 30 endroits dans le noyau seul. La mise à niveau elle-même semble assez simple. Nous pouvons utiliser {{#in-element}} et un élément HTML vide ordinaire comme placeholder pour ce que nous utilisions pour rendre dans les sorties nommées.

Ember 3.26 → Ember 3.27 (partie 3 - Composants intégrés hérités)

Cette partie se concentrera sur les composants intégrés hérités, et elle traitera quatre dépréciations.

  1. Importation des composants intégrés hérités :link: - jusqu’à : 4.0.0
  2. Arguments hérités des composants intégrés :link: - jusqu’à : 4.0.0
  3. Arguments d’attribut HTML hérités des composants intégrés :link: - jusqu’à : 4.0.0
  4. Réouverture des composants intégrés hérités :link: - jusqu’à : 4.0.0

Je n’ai pas ajouté de tailles à ceux-ci parce que… cela dépend vraiment. Laissez-moi expliquer.

Les composants intégrés hérités comme Checkbox, TextField, TextArea, et LinkComponent seront supprimés dans Ember 4.0. Nous les utilisons en assez d’endroits, et nous utilisons aussi certains modèles dépréciés sur eux.

Ember offre une voie de mise à niveau qui nous permet de continuer à les utiliser, mais nous devons les importer différemment. Cependant, ils ne recevront aucune mise à jour d’Ember et resteront figés. J’espère que nous pouvons nous en débarrasser tous ; cependant, cela pourrait être un peu complexe. Ce changement nécessitera plus de discussion quand le moment sera venu.

Étape 5

Ember 3.27 → Ember 3.28

C’est un size-s car c’est seulement une augmentation de version. 3.28 est la dernière version LTS dans le cycle de développement 3.x. Elle n’introduit aucune nouvelle dépréciation après 3.27, et c’est une bonne version pour nous arrêter pendant quelques semaines pendant que les choses se stabilisent.

La LTS 3.28 est supportée jusqu’en août 2022 (corrections de bugs et correctifs de sécurité)

Cette “pause” a quelques avantages.

  1. Elle nous donne plus de temps pour voir si des problèmes surgissent
  2. quand nous publions une version stable, elle devrait être sur 3.28
  3. elle nous donne le temps de faire toutes les annonces nécessaires concernant les thèmes et plugins auto-gérés
  4. elle nous donne le temps de nous assurer que la transition jQuery → pas de jQuery est aussi fluide que possible.

Étape 6

Après quelques semaines, nous pouvons enfin augmenter notre version vers Ember 4

Ember 3.28 → Ember 4.1

Nous pouvons maintenant désactiver l’intégration jQuery optionnelle en tant que dernière dépréciation du cycle 3.x.

Cette mise à jour introduit deux dépréciations mineures.

  1. Déprécier Ember.assign :link: - jusqu’à : 5.0.0 - size-s

    Nous ne l’utilisons pas dans le noyau, mais nous devrons vérifier les thèmes/plugins. Dans tous les cas, c’est un simple renommage.

  2. Classe AutoLocation :link: - jusqu’à : 5.0.0 - size-s

    En théorie, nous n’aurions besoin que de changer locationType: 'auto' en locationType: 'history' dans notre fichier d’environnement Ember, et cela devrait simplement fonctionner.

Flux de travail

Comme je l’ai mentionné au début, nous ferons très attention avec ces mises à jour. Nous testerons/corrigerons/fixerons tous les plugins/thèmes officiels avec chaque mise à jour, et nous enverrons également des PR aux plugins/thèmes non officiels populaires.

L’objectif ici n’est pas de ralentir le développement ou de créer des maux de tête. Donc, les PRs seront strictement ciblées, avec un changement par PR et rien de trop grand.

Dans un monde idéal, tous les changements se produiraient en arrière-plan sans interrompre le travail des autres. C’est pourquoi nous prévoyons de garder les PRs courtes et simples. Aussi, nous n’aimons pas trop les modèles mixtes. Donc, nous ne voulons pas rester bloqué dans un état intermédiaire sur une base par fichier. Un composant est soit classique soit Glimmer, et un modèle utilise soit des accolades soit des chevrons, rien entre les deux.

J’espère que cette feuille de route était claire. Comme je l’ai mentionné au début, c’est juste un aperçu général de haut niveau. Si quelque chose est flou, incorrect, ou ne vous convient pas, veuillez nous le faire savoir.

Noyau: Tous ont été :white_check_mark:

Plugins:

discourse-events

discourse-data-explorer


@Johani peut-être pas quelque chose qui bloque directement Ember 4, mais les mixins pourraient également mériter d’être pris en compte dans la feuille de route :

De plus, certaines nouvelles classes de framework, telles que les composants Glimmer, ne prennent pas du tout en charge les mixins Ember. À l’avenir, les mixins seront supprimés du framework et ne seront pas remplacés directement.

Avons-nous une idée de quand les listes de sujets passeront aux composants Glimmer et abandonneront les modèles bruts ?

En espérant pouvoir m’y consacrer dans les 3 à 6 prochains mois, mais rien n’est gravé dans le marbre.

Pour l’instant, l’objectif principal de notre équipe de « modernisation JS » est de faire passer Discourse à Ember 4.x+ (3.28 est maintenant en fin de vie).

Salut @david,

Par curiosité, quelle serait votre recommandation concernant la personnalisation ? Nous envisageons de relooker significativement Discourse (simplifications, le rendre plus “type réseau social”, moins axé développeur, utiliser des posts avec des commentaires au lieu de fils de discussion).

Étant donné l’ampleur des changements prévus sur le front-end de Discourse au cours des 6 prochains mois, devrions-nous potentiellement attendre avant de tenter de le faire ?

Cordialement,
Simon

Salut Simon, il est difficile de donner une réponse définitive ici étant donné l’incertitude quant au calendrier.

Chez CDCK, nous développons toujours de nouveaux thèmes pour les clients par rapport à la version existante de core. Tout changement majeur (par exemple, une réécriture de la liste des sujets) sera initialement facultatif, vous aurez donc le temps d’adapter les choses.

En général, vous aurez un chemin de migration plus facile si vous utilisez les API « recommandées » comme les points d’extension de plugin, et évitez de remplacer des modèles.

Merci @david, c’est utile.

Cordialement,
Simon

Comment allons-nous gérer la modification du modèle étant donné l’approche Glimmer d’Octane et « data-down, actions up » ?

Nous avons un défi avec les sorties de plugin, j’observe, où nous avions auparavant une liaison bidirectionnelle, mais si nous attachons un composant Glimmer à une sortie, nous n’avons plus cette option.

La liaison bidirectionnelle via les sorties de plugin est un modèle établi, où dans certains cas, nous voulons mettre à jour le modèle passé via la sortie de plugin.

J’ai remarqué cette recommandation dans la documentation d’Ember :

Notamment :
« La deuxième option est d’exécuter le ember-native-class-codemod pour tous les composants restants. Cela les transformera en composants qui importent depuis @ember/component, conservant toutes les mêmes API que les composants classiques, mais simplement représentées dans une syntaxe de classe native. »

Vos réflexions sont les bienvenues.

La modification de la liaison bidirectionnelle fait référence à la réaffectation des arguments, mais vous pouvez toujours les modifier.

Par exemple, ceci n’est pas autorisé dans les composants Glimmer :

this.args.topic = blah

Mais ce genre de chose :

this.args.topic.title = "blah"

est toujours possible.

En fait, je ne pense pas que la réaffectation des arguments soit actuellement possible dans les Plugin Outlets en raison de la façon dont nous utilisons un {{hash}} pour passer les arguments. Je ne m’attends donc à aucun changement sur ce front. :crossed_fingers:

De nombreux thèmes/plugins officiels utilisent déjà les composants Glimmer comme connecteurs de plugin outlets, et la documentation actuelle sur meta décrit comment le faire.

Les composants Glimmer offrent une expérience développeur améliorée et de meilleures performances. Mais il est important de noter qu’il n’y a pas d’urgence immédiate à convertir les composants classiques en composants Glimmer. Les composants classiques sont toujours pris en charge dans Ember 5.

La chose la plus importante à l’heure actuelle est de résoudre tous les messages de dépréciation dans les thèmes/plugins. Nous publierons plus d’informations sur les stratégies de mise à niveau dans les semaines/mois à venir, mais nous progressons bien dans la préparation du cœur pour la mise à niveau. Il existe même une branche expérimentale Ember 5.3 de Discourse que nous exécutons sur une instance interne depuis quelques semaines avec un grand succès ! :tada:

Oh ! C’est très intéressant, merci !

Je comprends qu’il y ait beaucoup de possibilités dans la mise à niveau et je reconnais qu’il est très difficile de donner un calendrier pour tout cela, mais y a-t-il déjà du mouvement sur les listes de sujets ?

Absolument ! @cvx y travaille activement, et il existe déjà un paramètre de site « experimental glimmer topic list groups » si vous souhaitez l’essayer.

Cependant, nous n’avons pas encore commencé à explorer l’aspect personnalisation de cette fonctionnalité, veuillez donc ne pas essayer de créer de thèmes/plugins basés dessus. Nous espérons travailler sur cela dans les prochaines semaines.

Excellent progrès !

Oui, maintenir les options de personnalisation aussi ouvertes que possible serait très apprécié.

Nous voyons de nombreuses demandes pour des mises en page très différentes de celles de l’élément de liste de sujet par rapport à la mise en page normale.

J’ai remarqué les nouveaux avis de dépréciation, par exemple :

« Utilisez le transformateur de valeur topic-list-columns et d’autres nouvelles API de plugin topic-list à la place. »

Y aura-t-il une communication à ce sujet (peut-être en ai-je manqué une ? :thinking: ) ?

Oui, nous devrions avoir la documentation prête la semaine prochaine environ !

Ce ne sont pas encore des messages de dépréciation « appropriés » - nous les enregistrons à l’aide de console.debug au lieu de console.warn, donc ils ne sont même pas visibles dans la configuration par défaut des outils de développement Chrome. (cc @cvx)

C’est parti @merefield

OOh. Peut-être que je veux savoir ça. Comment fait-on pour les voir ? Est-ce que console.debug ne rend pas les linters malheureux ?

Je pense que cela fait partie de ma réponse :

Ouais !

La raison pour laquelle nous les avons mis en mode debug est que nous nous assurions que tout était prêt avant d’ouvrir les vannes d’avertissement. C’est juste que @merefield était trop observateur et les a trouvés quand même :wink:

Maintenant que le sujet est publié, nous allons les mettre à niveau vers des dépréciations normales très bientôt :fire:

Mais peut-être que dans mon propre travail de développement, je veux utiliser console.debug plutôt que console.log. En règle générale, les choses que je fais, seul moi m’en soucie.