Introduction : pourquoi npm vous crie-t-il dessus ?
\n\nAvez-vous déjà exécuté npm install et vu quelque chose comme ça ?
npm WARN ts-patch@3.2.1 requires a peer of typescript@>=4.0 but none is installed. You must install peer dependencies yourself.\n\nFamiliar ? Si oui — vous n'êtes pas seul. Cette question sur Stack Overflow a recueilli des milliers de vues et des dizaines de commentaires de développeurs qui, comme vous, voulaient simplement installer un package et ont eu mal à la tête à la place. Aujourd'hui, nous allons comprendre ce que sont les dépendances peer, pourquoi npm insiste autant pour les installer, et comment travailler correctement avec elles dans des projets TypeScript. Et oui, ce ne sera pas une documentation ennuyeuse, mais une analyse vivante avec des exemples de code.
\n\nC'est parti !
\n\nQue sont les dépendances peer et pourquoi sont-elles nécessaires ?
\n\nImaginez que vous assemblez un puzzle. Vous avez l'image principale (votre projet) et plusieurs pièces (les packages). Certaines pièces s'emboîtent parfaitement, mais seulement si vous utilisez le bon cadre. Dans le monde npm, ce "cadre" est une dépendance peer.
\n\nUne dépendance peer est une exigence d'un package selon laquelle une bibliothèque spécifique doit être installée dans le projet, mais le package ne l'installera pas lui-même. Pourquoi ? Parce que cette bibliothèque devrait déjà être présente dans votre projet, et le package "fonctionne simplement avec" elle sans créer de doublons.
\n\nPar exemple, le package ts-patch (un outil populaire pour TypeScript) nécessite que typescript soit installé dans le projet. Mais ts-patch n'installe pas TypeScript lui-même — il suppose que vous l'avez déjà ajouté. Si TypeScript est manquant, npm affiche cet avertissement.
Pourquoi est-ce important pour les projets TypeScript ?
\n\nTypeScript n'est pas seulement un langage, c'est un écosystème. De nombreux packages (par exemple, @types/react, ts-loader, eslint-plugin-typescript) fonctionnent au-dessus de TypeScript. Si vous avez TypeScript version 5.0 installée et que le package nécessite la version 4.0+, tout va bien. Mais si TypeScript n'est pas installé du tout — les problèmes commencent.
Voici un exemple concret. Supposons que vous écriviez un petit script en TypeScript et utilisiez ts-patch pour la transformation de code. Vous exécutez :
npm install ts-patch --save-dev\n\nEt vous obtenez :
\n\nnpm WARN ts-patch@3.2.1 requires a peer of typescript@>=4.0 but none is installed.\nYou must install peer dependencies yourself.\n\nQue faire ? Paniquer ? Non. Il suffit d'installer TypeScript :
\n\nnpm install typescript --save-dev\n\nProblème résolu. Mais que faire si vous avez déjà TypeScript, mais une version différente ? C'est là que les choses deviennent intéressantes.
\n\nComparaison des approches : comment installer les dépendances peer
\n\nIl existe plusieurs façons de gérer cette erreur. Comparons-les en prenant l'exemple d'un projet TypeScript.
\n\nApproche 1 : Installation manuelle (classique)
\n\nLa méthode la plus simple et la plus fiable est de lire l'avertissement et d'installer manuellement le package requis. Vous voyez que typescript@>=4.0 est requis, et vous l'ajoutez :
npm install typescript@^4.0 --save-dev\n\nAvantages :
\n- \n
- Contrôle total sur la version. \n
- Pas de surprises cachées. \n
Inconvénients :
\n- \n
- Vous devez lire attentivement les messages npm. \n
- S'il y a beaucoup de packages, le processus devient fastidieux. \n
Cette approche est idéale pour les petits projets où vous savez exactement de quelles dépendances vous avez besoin.
\n\nApproche 2 : Installation automatique à l'aide de npx ou de plugins
\n\nCertains outils, comme npm-check ou install-peerdeps, peuvent installer automatiquement toutes les dépendances peer pour un package spécifique. Installez l'utilitaire globalement :
npm install -g install-peerdeps