Comme toute bonne agence Web réalisant des développements, dans divers langages, nous sommes équipés d’un outil de CI / CD (Gitlab pour ne pas le nommer) et nous réalisons des projets en JavaScript / TypeScript. Nous avions de plus en plus de problème, notamment avec la librairie Sharp qui nous causait bien du tort.
Une technique d’un ancien temps
Nous utilisions Yarn en version 1 (hé oui, pourquoi changer quand cela fonctionne tout simplement …) et pour mettre à jour les versions de nos dépendances, nous utilisions npm-check-updates. Cette petite commande répondant au doux nom de NCU, nous était fort pratique pour maintenir nos dépendances, dans des versions les plus récentes possibles mais une nous causait bien des problèmes, à savoir la librairie Sharp (cette librairie permet de réaliser des manipulations sur les images)
En route vers une nouvelle technique
En regardant la documentation de Sharp, il nous est apparu une révélation, celle de passer à PNPM, que nous avons essayé. La migration était on ne peut plus simple, à savoir un coup de pnpm update, son fichier de lock a alors été généré et il nous a fallu enlever le yarn.lock
Plus qu’à adapter les Dockerfile ou fichiers .gitlab-ci.yml pour mettre des pnpm install et des pnpm run build
Au passage, si vous utilisez du Docker et l’image node officielle, pensez à mettre un
RUN corepack enable
Avant de lancer vos commandes pnpm, vos commandes vont échouer en vous informant que pnpm n’est pas trouvé.
Un exemple vaut mieux que du baratin, prenons un exemple de Dockerfile pour un site réalisé avec le framework Astro
FROM node:latest as runtime RUN corepack enable RUN pnpm install RUN NODE_ENV=production pnpm run astro build
Au final, nos jobs vont plus vites, et nous n’avons plus de galère avec Sharp, c’est ce que l’on appelle un Quick Win Gagnant !