Le processus de migration : passer de RequireJS à Webpack
La nécessité de passer de RequireJS à Webpack était claire, mais l'ampleur de l'entreprise signifiait qu'ils s'attendaient à ce que le processus prenne au moins un an et implique beaucoup de complexité et de bande passante d'ingénierie à réaliser. L'idée à l'époque était qu'il fallait systématiquement parcourir la base de code section par section et tout migrer manuellement, ce qui aurait été vraiment onéreux.
Ma percée, si vous voulez l'appeler ainsi, a été de réaliser que je pouvais écrire du code capable de modifier le code du tableau de bord Braze en masse grâce à un processus automatisé - et également de ne pas modifier notre code, si nous devions annuler ces modifications. rapidement. J'ai fini par faire une preuve de concept suite à mon projet hack day, juste pour montrer que ça pouvait marcher, puis j'ai continué à travailler dessus pendant mon temps libre comme une sorte de projet passionnel.
Cela dit, les choses n'ont pas vraiment décollé jusqu'à ce que Greg Beaver, ingénieur logiciel senior au sein de l'équipe Braze Dashboard, s'implique. Il a pu prendre les scripts que j'avais écrits dans le cadre de ma preuve de concept et les incorporer dans un outil que nous pourrions partager avec d'autres ingénieurs. Cela, à son tour, signifiait que nous pouvions migrer de RequireJS vers Webpack sans forcer tous les ingénieurs travaillant sur le code lié au tableau de bord à s'arrêter pendant que nous le faisions ; au lieu de cela, ils ont pu utiliser l'outil pour synchroniser automatiquement tout code sur lequel ils travaillaient avec les modifications globales.
L'outil a fini par être si rapide (il ne prend que deux minutes environ à exécuter) et a si bien fonctionné que pendant que nous préparions les migrations, un ingénieur l'a utilisé comme solution de contournement pour les builds lents associés à RequireJS. Ils viennent de convertir leur branche en Webpack, ont apporté les modifications nécessaires, puis l'ont reconvertie afin de pouvoir la valider dans l'ancien code.
Avec cette nouvelle capacité à notre disposition, notre plan de migration était d'exécuter l'outil de Greg sur notre branche principale tous les soirs pendant quelques semaines et de demander aux gens de l'examiner manuellement dans l'environnement QA de cette branche, juste pour voir si quelque chose était cassé. Une fois que nous étions convaincus que tout semblait bon, nous avons informé le reste de l'organisation de la mise à jour prévue, leur avons expliqué comment ils pouvaient migrer leur code de RequireJS vers Webpack, et leur avons donné un aperçu de quelques considérations clés avant qu'ils ne deviennent en cours.
Grâce à notre approche, un projet qui devait durer plus d'un an s'est terminé en seulement trois semaines, ce qui est assez incroyable. L'impact de la migration était encore plus inattendu. En particulier, le processus de génération sur Webpack ne prend désormais généralement qu'environ une seconde, ce qui réduit de plus de 99 % le temps nécessaire à chaque vérification de code.