Adieu Yarn v1, bonjour PNPM

Adieu Yarn v1, bonjour PNPM

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 !

Comment faire une gestion de panier avec React ?
Docker, Python et FastAPI sont dans un bateau
Alpine.JS : le digne remplaçant de jQuery ?
NodeJS : maintenez vos packages.json à jour