Aller au contenu principal
Traduction Bêta Non Officielle

Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →

Gestion des packages héritée

note

Dans la version 9 de Lerna, publiée en septembre 2025, les commandes lerna bootstrap, lerna add et lerna link ont finalement été complètement supprimées après plus de 2 ans de dépréciation.
Si vous utilisez encore ces commandes, veuillez migrer vers la fonctionnalité workspaces des gestionnaires de packages, disponible depuis longtemps.

Le guide suivant fournira le contexte et vous aidera à comprendre pourquoi et comment migrer.

En juin 2023, avec Lerna v7.0.0, nous avons supprimé par défaut les commandes lerna bootstrap, lerna add et lerna link. Plus de deux ans plus tard, dans Lerna v9.0.0, ces commandes ont été définitivement retirées.

Cette section explique comment migrer de leur utilisation et moderniser votre configuration avec les workspaces des gestionnaires de packages. Pour le contexte complet du pourquoi, consultez la section Contexte ci-dessous.

Le changement mental important est de reconnaître que Lerna n'est pas responsable de l'installation et du lien des dépendances dans votre dépôt - votre gestionnaire de packages est bien plus adapté à cette tâche.

La méthode pour y parvenir est d'utiliser la fonctionnalité workspaces de votre gestionnaire de packages. Consultez leur documentation respective :

En utilisant les workspaces, votre gestionnaire de packages effectue exactement le même lien que lerna bootstrap et lerna link faisaient auparavant, mais cette fonctionnalité est intégrée à la commande install. Aucune commande supplémentaire n'est nécessaire après l'installation (à condition d'avoir configuré les workspaces selon la documentation de votre gestionnaire).

Il en va de même pour remplacer lerna add. Ajouter et supprimer des dépendances est déjà géré par votre gestionnaire de packages. Grâce aux workspaces, vous pouvez exécuter une commande install appropriée pour ajouter une dépendance à un package/workspace spécifique, et tous les liens locaux pertinents se feront automatiquement.

Voir ci-dessous pour des comparaisons concrètes et des exemples avant/après.

Fonctionnalité

lerna bootstrap remplaçait npm install (ou yarn/pnpm). Il installait les packages externes et liait les packages internes du workspace. lerna link ne réalisait que l'étape de liaison interne.

Où le trouver ?

Probablement dans la propriété "scripts" du package.json à la racine de votre workspace. Vérifiez aussi vos pipelines CI, qui pourraient appeler lerna bootstrap au lieu de npm install (ou yarn/pnpm).

Par quoi le remplacer ?

Remplacez lerna bootstrap par npm install (ou yarn/pnpm). Si votre gestionnaire de packages exécute déjà une commande d'installation avant lerna bootstrap, supprimez simplement cet appel. lerna link peut être supprimé car la liaison est désormais gérée par votre gestionnaire pendant npm install.

info

Si vous utilisez yarn et dépendez de la liaison des binaires, vous devrez peut-être supprimer votre dossier node_modules une fois après la migration vers les workspaces. Pour les détails, voir cette issue yarn.

Remplacer votre utilisation de lerna add

Fonctionnalité

lerna add ajoutait une dépendance aux packages du workspace. Il mettait à jour les fichiers package.json de chaque package concerné.

Où le trouver ?

Bien qu'appelé manuellement en général, lerna add peut apparaître dans certains scripts du package.json à la racine de votre workspace.

Par quoi le remplacer ?

lerna add peut généralement être remplacé par une variante de npm install (ou yarn/pnpm). Le cas d'usage principal pour lerna add était d'ajouter une dépendance à un seul package du workspace. Cette commande :

lerna add <dependency> --scope <package>

peut être remplacée directement par :

npm install <dependency> -w <package>

Le drapeau -w indique à npm d'installer la dépendance uniquement dans le package du workspace spécifié par <package>, similaire à l'option --scope de Lerna.

Pour ajouter une dépendance à plusieurs packages, utilisez plusieurs fois l'option -w :

npm install <dependency> -w <package1> -w <package2>

Hoisting personnalisé

Un avantage de l'ancienne commande bootstrap de Lerna était le contrôle offert sur le hoisting des dépendances vers la racine ou leur maintien dans les emplacements imbriqués.

Vous pourriez donc hésiter à abandonner lerna bootstrap si votre configuration de hoisting est complexe.

D'après nos tests, yarn moderne (v3 et ultérieur) offre la plus grande flexibilité pour le contrôle du hoisting :

https://yarnpkg.com/configuration/yarnrc/#nmHoistingLimits

Nous n'avons trouvé aucun dépôt utilisant lerna bootstrap, quelle que soit la complexité du hoisting, qui n'ait pu être converti à yarn moderne. Essayez cette solution si cela vous concerne.

Si vous utilisiez lerna bootstrap sans besoins avancés de hoisting, vous pouvez choisir n'importe quel gestionnaire de packages - tous proposent des implémentations robustes des workspaces.

Solution temporaire pour les commandes héritées

Si vous étiez bloqué·e et aviez besoin des commandes de gestion de packages héritées (lerna bootstrap, lerna add, lerna link) dans les versions 7 ou 8, vous pouviez installer le package @lerna/legacy-package-management à la même version que votre package lerna. Cette solution ajoutait les commandes avec leurs anciennes implémentations.

Il est important de noter qu'il ne s'agissait que d'une solution temporaire. Ce package est immédiatement passé en mode maintenance uniquement : aucune nouvelle fonctionnalité n'a été envisagée pour les aspects liés à la gestion de packages héritée (comme lerna bootstrap, lerna add et lerna link), mais nous avons intégré les correctifs critiques et les mises à jour de sécurité.

Toute prise en charge de @lerna/legacy-package-management a été abandonnée dans la v9, plus de 2 ans après son introduction comme solution temporaire, laissant aux équipes un délai suffisant pour migrer.

Contexte

Lerna est l'outil original de monorepo/workspace dans l'écosystème JavaScript. À sa création en 2015/2016, l'écosystème était totalement différent et aucune solution native ne permettait de gérer plusieurs packages dans un seul dépôt (un "workspace"). Des commandes comme lerna bootstrap, lerna add et lerna link étaient essentielles car il n'existait pas d'alternative.

Cependant, il faut reconnaître que depuis de très nombreuses années, les gestionnaires de packages que nous utilisons (npm, yarn et pnpm) prennent tous en charge nativement le concept de workspaces comme un cas d'usage prioritaire.

Leurs implémentations éprouvées couvrent l'ajout, la suppression et la liaison des packages locaux, combinés naturellement avec les dépendances tierces.

C'est pourquoi, durant les dernières années de sa tenure comme mainteneur principal de Lerna, Daniel encourageait vivement à abandonner les commandes héritées de gestion de packages au profit des fonctionnalités natives des gestionnaires.

Nous connaissions ce contexte de loin, mais en tant que nouveaux responsables du projet en 2022, nous ne voulions pas intervenir précipitamment en supprimant des fonctionnalités sans d'abord prendre le temps de nous familiariser avec la réalité de près. Maintenant que nous maintenons activement le projet depuis un certain temps, nous sommes entièrement d'accord avec Daniel et d'autres pour dire que les commandes historiques de gestion de packages dans lerna devaient être retirées.

En supprimant ces éléments hérités qui ont de meilleures alternatives natives dans les gestionnaires de packages, nous et le reste de la communauté Lerna pouvons désormais concentrer nos efforts sur les aspects les plus précieux de Lerna (comme, sans s'y limiter, le versioning et la publication), et les optimiser au maximum !

info

Ce même contexte est abordé dans la discussion sur lerna v7. Si vous avez des préoccupations spécifiques, rejoignez-nous là-bas et fournissez autant d'informations que possible !