Pouvons-nous ajouter des modules ember à un plugin discourse ? (comme ember power select)

J’aimerais ajouter des modules complémentaires Ember à un plugin.

Voici un exemple : Power Select d’Ember.

(Cela aide pour les menus déroulants. Discourse utilise select-kit, qui est également très puissant, mais je trouve qu’il est difficile à personnaliser car il est fortement abstrait dans la base de code. Je souhaite donc essayer Power Select).

Dans une application Rails/Ember classique, je pense que j’ajouterais simplement le module complémentaire avec :

$ ember install ember-power-select

Puis j’ajouterais des éléments comme ceux-ci :

template hbs :

<PowerSelect @options={{this.names}} @onChange={{this.foo}} as |name|>
  {{name}}
</PowerSelect>

fichier JavaScript correspondant :

    import Controller from '@ember/controller';
    export default class extends Controller {
      names = ['Stefan', 'Miguel', 'Tomster', 'Pluto']
      foo() { }
    }

Mais un plugin Discourse n’est pas une application Rails standard. Y a-t-il quelque chose de spécial que je dois faire pour que cela fonctionne ?

3 « J'aime »

Eh bien, je l’ai regardé en me demandant si vous auriez des indices, mais nous voici quatre jours plus tard.

Je suis plutôt débutant avec Ember, mais je suis assez certain que vous serez bien mieux loti si vous arrivez à gérer les éléments « fortement abstraits » et à jouer selon ces règles. Non seulement l’intégration d’autres add-ons est difficile à comprendre, mais elle sera également difficile à maintenir.

1 « J'aime »

Nous sommes en train de migrer Discourse vers EmberCLI, et nous y sommes presque :

Merci à tous.

J’avais déjà vu cela, mais je suis rassuré d’avoir la confirmation qu’il n’est pas possible d’ajouter des add-ons Ember tant que cette migration n’est pas terminée. Il semble donc que l’ajout d’add-ons Ember sera bientôt possible, une fois la mise à niveau achevée. Cela semble excellent.


Je pense que c’est une question intéressante. Voici mon avis :

En ce qui concerne l’utilisation des éléments « abstraits » de Discourse par rapport aux add-ons Ember : je pourrais me tromper, mais je pense que l’utilisation d’add-ons Ember pour des tâches spécifiques dans les plugins pourrait être plus facile à maintenir, dans les cas où vous essayez de faire quelque chose de différent de ce que Discourse fait déjà. Voici mon raisonnement :


Un exemple ici serait de vouloir ajouter un tout nouveau menu déroulant dans un plugin. Cette distinction est probablement importante — je parle ici d’essayer de faire de nouvelles choses dans un plugin qui ne sont pas réalisées dans la base de code de Discourse, et la question est de savoir s’il faut commencer par les méthodes de Discourse ou par un add-on séparé.

Souvent, vous n’avez vraiment pas le choix. Par exemple, si je voulais ajouter un champ personnalisé aux sujets, je personnaliserais toujours en me basant sur les méthodes et le code préconstruits de Discourse.

Mais s’il s’agit d’une fonctionnalité ciblée — comme un menu déroulant pour un nouveau besoin — je serais déjà dans une situation où, si j’utilise les méthodes de Discourse, je devrais les adapter à des usages pour lesquels elles n’ont pas été conçues.

Option 1 : Je pourrais essayer de prendre le code select-kit que je vois, par exemple, dans category-chooser, et l’insérer à un nouvel endroit (qui ne concerne pas les catégories), puis essayer de le personnaliser pour qu’il corresponde à ce que je veux que le menu déroulant fasse, au lieu de gérer les catégories. C’est la tâche que j’ai décrite plus tôt comme étant délicate.

Et cela pourrait être difficile à maintenir — car si l’équipe de Discourse modifie quelque chose dans le fonctionnement du code select-kit de category-chooser, cela pourrait modifier mon nouveau menu déroulant personnalisé, mais de manière surprenante (car je l’avais personnalisé pour qu’il fonctionne légèrement différemment du menu déroulant réel de category-chooser).

Option 2 : Je pourrais insérer quelque chose provenant d’Ember qui est robuste mais aussi conçu pour être personnalisé, où je peux voir assez clairement comment le code fonctionne réellement. Dans ce cas, je pourrais manquer des fonctionnalités intéressantes que Discourse pourrait ajouter à ses menus déroulants, mais je pourrais mieux maîtriser le fonctionnement de mon propre menu déroulant. Donc, c’est probablement la meilleure option, je pense, si c’est possible.

Option 3 : Le coder entièrement à partir de zéro. C’est là que j’ai tendance à finir. Une fois le codage terminé, c’est agréable d’avoir un code que je comprends entièrement et que je peux personnaliser. Mais bien sûr, cela prend plus de temps, et (les versions initiales en tout cas) seront probablement moins puissantes et robustes que ce que l’équipe de Discourse ou l’équipe d’Ember ont construit.

3 « J'aime »

Remonter, et ce serait super d’ajouter la prise en charge des modules complémentaires Ember aux composants de thème…

6 « J'aime »

Rebond.
Si nous ajoutons un addon à Discourse comme ceci :
cd app/assets/javascripts/ && yarn add LIB_NAME
Comment cet addon sera-t-il disponible dans le plugin ?

Je me demande si c’est possible de nos jours ? (Et si oui, comment ?)

2 « J'aime »

Je crains que non. Les modules Ember peuvent être ajoutés au cœur de Discourse, mais pas via des plugins. Nous pourrions éventuellement ajouter un moyen pour les plugins/thèmes de spécifier des dépendances npm, mais ce n’est pas sur la feuille de route immédiate.

2 « J'aime »

Je cherchais littéralement la même chose.

– Question subsidiaire pour @david : bien que ce ne soit pas disponible via les plugins, pourrions-nous théoriquement ajouter un plugin au cœur, puis l’utiliser dans un plugin si nous auto-hébergeons ? Si oui, comment ? (J’ai essayé de l’ajouter à package.json dans app/assets/javascripts/discourse, mais sans succès pour le charger, j’imagine parce qu’il me manque quelque chose de simple.)

1 « J'aime »

oui, mais vous ne voulez vraiment pas forker Discourse, puis essayer d’y intégrer tous les commits. Tous ceux qui l’ont fait regrettent amèrement de l’avoir fait.

Hmm. Mais s’il ne s’agit que d’un seul fichier, vous pourriez concevoir que votre app.yml copie le fichier depuis quelque part dans /var/www/discourse juste après avoir cloné Discourse. Je pense l’avoir déjà fait pour modifier les limites dans les paramètres du site.

2 « J'aime »

Oui, comme @pfaffman l’a mentionné, vous pourriez peut-être le faire fonctionner via quelques modifications de app.yml. Vous devriez vous assurer que la modification a été effectuée avant les étapes yarn install et assets:precompile.

Mais c’est totalement non pris en charge et pourrait casser des choses de manière inattendue. Je ne le recommanderais pas.

Par curiosité, quel module complémentaire espériez-vous utiliser ?

2 « J'aime »

Je n’étais pas vraiment allé aussi loin, cependant, j’ai constaté que la plupart des extensions populaires ont des fonctionnalités qui existent déjà dans Discourse lui-même. L’attrait des extensions est que, généralement, la documentation est un peu meilleure et les ressources disponibles si vous êtes bloqué sont assez bien développées. Par exemple, il existe une abondance de documentation et de problèmes qui sont « résolus » avec ember-concurrency, donc si vous êtes un nouveau développeur, avoir accès à cette extension signifierait généralement que vous pouvez vous lancer un peu plus facilement.

Mais comme je l’ai dit, c’était plus une interrogation qu’un désir.

1 « J'aime »

Donc, vous cherchez littéralement des ennuis. Je vous recommande de ne pas considérer d’extension tant que vous n’avez pas constaté que les ressources existantes ne répondent pas à vos besoins.

Mais vous ne savez pas si elle sera compatible avec la façon dont Discourse résout ce problème aujourd’hui ou à l’avenir. Si vous voulez développer pour Discourse, alors regarder des exemples de la façon dont les choses fonctionnent dans Discourse sera la bonne approche.

Ne soyez pas le gars qui cherche ses clés sous la lampe plutôt que sous la voiture où il les a laissées tomber parce qu’on voit mieux sous la lampe.