-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
147 additions
and
25 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
122 changes: 122 additions & 0 deletions
122
_posts/2023-09-06-migrer-de-commonjs-vers-esm-migration.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
--- | ||
layout: post | ||
title: "Migrer de CommonJS vers ECMAScript Modules - #2" | ||
date: 2023-09-06 14:04:00 +0200 | ||
categories: javascript | ||
excerpt: "Récit d'une aventure : migrer 400kLoc NodeJs en deux mois - Le faire" | ||
cover: | ||
image: "cjs-to-esm.png" | ||
source_url: https://raw.githubusercontent.com/wessberg/cjstoesm/master/documentation/asset/logo.png | ||
authors: pierre_top | ||
--- | ||
|
||
## Y'a quoi au menu ? | ||
|
||
Cet article est la suite de [la théorie sur la migration ESM]({% post_url 2023-08-25-migrer-de-commonjs-vers-esm %}). | ||
|
||
Il explique comment nous nous y sommes pris pour migrer l'API du monorepo (Pix)[https://github.com/1024pix/pix/tree/dev/api] qui fait 400kLoc, en deux mois. | ||
|
||
Si vous n'avez que cinq minutes, lisez [la stratégie](#la-stratégie). | ||
|
||
Si vous avez un peu plus de temps, choisissez dans le menu. | ||
|
||
Voilà les plats principaux : | ||
- monter et faire vivre [l'équipe dédiée](#léquipe) | ||
- [la stratégie](#la-stratégie) de migration | ||
- faire de la [mise en production](#en-approchant-de-la-production) un non-évènement | ||
|
||
Et si vous êtes gourmands, lisez tout du début à la fin... | ||
|
||
## L'équipe | ||
|
||
## La stratégie | ||
|
||
Des compromis | ||
|
||
### Un feedback rapide | ||
|
||
Migrer lib et tester manuellement pour voir si ça marche | ||
Puis migrer les tests | ||
|
||
Le choix de corriger les syntaxes CJS incompatibles sur place pour | ||
- bénéficier des tests automatisés | ||
- merger rapidement | ||
|
||
https://github.com/1024pix/pix/pull/5715 | ||
https://github.com/1024pix/pix/pull/5747 | ||
|
||
### Choisir ses combats | ||
|
||
On ne pouvait pas gérer toute la syntaxe, on a écrit les codemods obligatoires | ||
Le reste est modifié manuellement. Ce n'est pas un échec. | ||
|
||
|
||
Cela aboutit, après plusieurs tentatives, à ce ![workflow de développement](/assets/images/posts/migrer-de-commonjs-vers-esm-migration/codemod-workflow.png) | ||
|
||
"Codemodception" | ||
|
||
|
||
### Le choix des exports nommés | ||
|
||
Sondage dans les équipes | ||
|
||
Exception : les fichiers qui n'exportent qu'un seul objet (use-case) | ||
https://github.com/1024pix/pix/pull/5787/files#diff-734269ab23f38145d1f6742bd4282022dc6d47a8f57c3e2b372e45da7f1d88f4 | ||
|
||
|
||
|
||
Ou alors on transforme les exports anonymes CSJ en exports nommés CJS (et les imports aussi). | ||
|
||
Ca permet de lancer les tests en CJS donc d’aller plus vite. | ||
|
||
Et du coup il reste plus que deux codemods CJS=>ESM qui ne gèrent que les imports/exports nommés (simples!). | ||
|
||
générer un import nommé ESM (on part du principe que le nom de la variable est prévisible, c’est le nom du fichier snake-case transformé en camelCase/PascalCase) | ||
|
||
https://github.com/1024pix/pix/pull/5731 | ||
|
||
### Les tests mockés et l'injection de dépendance | ||
|
||
|
||
## En approchant de la production | ||
|
||
### Le suivi et la motivation | ||
L'équipe de production a affiché l'avancée de la migration sur [Are we ESM yet ?](https://1024pix.github.io/areweesmyet/). | ||
|
||
C'est une [Github page](https://github.com/1024pix/areweesmyet) avec un appel à l'API de la CI qui affiche l'avancement des tests, simple, mais efficace. Elle rend le travail et les difficultés visibles à tous. | ||
|
||
![dashboard code](/assets/images/posts/migrer-de-commonjs-vers-esm-migration/are-we-esm-yet.png) | ||
|
||
### Comment tester hors CI ? | ||
|
||
https://1024pix.atlassian.net/wiki/spaces/TC1/pages/3754164240/D+ploiement+de+l+API+en+ESM | ||
|
||
On s'est posé la question un peu tard, brainstorming avec les [captains](/organisation/2020/04/14/les-capitaines-de-la-production.html) | ||
|
||
Parler du canary | ||
https://github.com/1024pix/pix-dev-tools/tree/main/captain/canary-releases | ||
https://github.com/1024pix/pix/blob/dev/mon-pix/servers.conf.erb#L30 | ||
|
||
Modification du workflow Slack | ||
![dashboard canary](/assets/images/posts/migrer-de-commonjs-vers-esm-migration/canary.png) | ||
|
||
2 semaines de déploiement progressif: front, workers.. | ||
|
||
|
||
## Happy end | ||
|
||
Le 1er juin 2023, 3 mois après avoir donné le coup d'envoi, toute la production tourne en ESM | ||
https://1024pix.github.io/areweesmyet/ | ||
|
||
![dashboard code](/assets/images/posts/migrer-de-commonjs-vers-esm-migration/are-we-esm-yet.png) | ||
|
||
## Plus | ||
|
||
### Le code | ||
La [pull request principale](https://github.com/1024pix/pix/pull/5787) et ses 132 commits | ||
Zoom sur les codemods | ||
|
||
### Workflow canary | ||
Voilà la stratégie de déploiement | ||
![workflow canary](/assets/images/posts/migrer-de-commonjs-vers-esm-migration/workflow-canary.png) | ||
|
Binary file added
BIN
+312 KB
assets/images/posts/migrer-de-commonjs-vers-esm-migration/are-we-esm-yet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+207 KB
assets/images/posts/migrer-de-commonjs-vers-esm-migration/codemod-workflow.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+5.99 KB
assets/images/posts/migrer-de-commonjs-vers-esm-migration/the-end.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+326 KB
assets/images/posts/migrer-de-commonjs-vers-esm-migration/workflow-canary.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.