Blog d'une Belette Sauvage

L'aventure Ember Initiative đŸč❀ Semaine 8

· 720 mots · 4 minutes de lecture
Catégories Developement
Étiquettes web ember ember-initiative-journey

Semaine 8 – Une nouvelle version pour ember-test-selectors

#web #emberjs #embertestselectors #pnpm #workspaces #babel #viteplugins #rollupplugins #emberinspector

ember-test-selectors 7.1.0 est disponible, ainsi que strip-test-selectors 1.0.0. AprĂšs avoir clĂŽturĂ© ce sujet, j’ai aussi pu m’intĂ©resser Ă  quelques issues sur ember-vite-codemod et faire du pair avec Chris sur notre prochain grand chantier : faire fonctionner Ember Inspector avec Vite.

Astuces tirĂ©es d’ember-test-selectors #

À propos de workspace:* #

ember-test-selectors est désormais un monorepo avec la structure suivante :

  • ember-test-selectors : l’addon classique qui existait auparavant
  • strip-test-selectors : les fonctions de transformation que vous pouvez configurer directement dans votre config Babel lorsque votre application utilise Embroider+Vite
  • tests :
    • classic-app : teste la compatibilitĂ© de l’addon classique
    • node-tests : tests unitaires pour le plugin qui supprime les data-test-* des objets JS
    • vite-app : teste la configuration pour strip-test-selectors

Travailler avec des monorepos nĂ©cessite de maĂźtriser le concept de workspaces. Pour simplifier, c’est un protocole qui permet de dĂ©clarer les diffĂ©rents packages contenus dans votre monorepo.

Si vous avez dĂ©jĂ  explorĂ© un monorepo d’addon v2 utilisant pnpm, vous avez peut-ĂȘtre vu la syntaxe "my-v2-addon": "workspace:*" dans le package.json de l’application de test. Cette syntaxe signifie « utilisez la version locale de my-v2-addon, quelle qu’elle soit », donc vous n’avez pas besoin de gĂ©rer manuellement les mises Ă  jour de version Ă  l’intĂ©rieur d’un monorepo.

Ce que vous ne savez peut-ĂȘtre pas, cependant, c’est que ce concept est ce que pnpm appelle les alias de workspace, et qu’il y a une chose trĂšs importante Ă  savoir Ă  leur sujet : les alias de workspace sont interprĂ©tĂ©s et remplacĂ©s lors du pnpm publish. Ça signifie que tant que vous utilisez pnpm publish pour publier vos packages publics, vous pouvez utiliser en toute sĂ©curitĂ© workspace:* Ă  l’intĂ©rieur d’un package public qui dĂ©pend d’un autre package du monorepo (par exemple, ember-test-selectors a une dĂ©pendance Ă  strip-test-selectors).

Utiliser Babel dans une application Vite #

La nouvelle documentation pour strip-test-selectors explique comment configurer Babel dans votre application Embroider+Vite pour reproduire le comportement de l’addon classique. Si vous avez une application Embroider+Vite, vous avez nĂ©cessairement dĂ©jĂ  un fichier babel.config.cjs. C’est forcĂ©ment le cas, car toute application Embroider+Vite fraĂźchement créée repose sur des plugins Babel dĂšs le dĂ©part, ça fait partie du blueprint de l’application.

Vous ĂȘtes-vous dĂ©jĂ  demandĂ© comment le babel.config.cjs finit par ĂȘtre utilisĂ©, cependant ? Si vous gĂ©nĂ©rez une simple application Vite avec pnpm create vite, elle n’utilisera pas Babel par dĂ©faut ; vous devez indiquer Ă  Vite que Babel doit ĂȘtre exĂ©cutĂ© Ă  un moment donnĂ©. La rĂ©ponse se trouve dans vite.config.mjs :

// autres imports...
import { babel } from '@rollup/plugin-babel';

export default defineConfig({
  plugins: [
    // autres plugins...
    babel({ babelHelpers: 'runtime', extensions }),
  ],
});

Le plugin babel de @rollup/plugin-babel est l’Ă©lĂ©ment qui prend en compte le fichier de configuration Babel. Les plugins Vite sont basĂ©s sur l’interface des plugins Rollup avec quelques options spĂ©cifiques Ă  Vite en plus. Par consĂ©quent, les plugins Rollup sont compatibles avec Vite et peuvent ĂȘtre utilisĂ©s tels quels dans la config Vite. C’est la raison pour laquelle, si vous Ă©crivez un plugin Vite qui n’utilise que des fonctionnalitĂ©s hĂ©ritĂ©es de Rollup, la convention est de l’appeler un plugin Rollup.

Structure d’Ember Inspector #

  • Ember Inspector est une application Ember qui s’affiche dans une iFrame et rĂ©cupĂšre des informations de l’application Ember principale affichĂ©e sur la page.
  • Pour permettre la communication, il injecte un module de dĂ©bogage sur la page. Ce module est responsable de l’accĂšs et du transfert des donnĂ©es requises vers l’inspecteur.

Cette approche ne fonctionne pas avec Vite, car elle repose sur des modules AMD et des variables globales. Nous devons trouver un nouveau moyen de permettre Ă  l’inspecteur de communiquer avec une application Embroider+Vite. Ce travail comprend plusieurs Ă©tapes que nous avons abordĂ©es cette semaine  :

  • Comprendre comment les informations sont communiquĂ©es pour une application Ember classique
  • DĂ©finir le nouveau protocole pour communiquer les informations depuis une application Embroider+Vite
  • ImplĂ©menter ce protocole


L’Ember Inspector est un sujet important pour l’Ember Initiative. Ce sera notre principal objectif Ă  partir de la semaine prochaine. L’objectif actuel, avec le budget dont nous disposons, est de rĂ©diger la RFC. Je continuerai Ă©galement Ă  travailler en parallĂšle sur quelques issues ouvertes que nous avons sur ember-vite-codemod. Pour que l’Ember Initiative puisse continuer, nous avons besoin de votre soutien đŸč❀ Contactez Mainmatter.


Intro, Semaine 7, Semaine 9