Mises à jour de packages plus intelligentes avec npm-check-updates
La dérive des dépendances tue les projets lentement. Vous sautez quelques mises à jour, puis quelques autres, et soudain vous vous retrouvez face à 47 packages obsolètes—la moitié avec des changements incompatibles, certains avec des vulnérabilités de sécurité, et aucune voie claire à suivre. Exécuter npm update ressemble à une roulette russe. Les mises à jour massives cassent la CI. Le choix sûr devient de ne rien faire, ce qui n’est pas sûr du tout.
npm-check-updates (ncu) propose une approche différente : séparer la décision de quoi mettre à jour de l’acte d’installer et de tester. Cette distinction compte plus que la plupart des équipes ne le réalisent.
Points clés à retenir
- ncu modifie les plages de versions dans package.json sans toucher à node_modules ni à votre fichier de verrouillage, vous donnant le contrôle sur le moment de l’installation
- Utilisez
--target minorou--target patchpour limiter les mises à jour aux changements non-incompatibles - Le flag
--peerempêche de suggérer des mises à jour qui causeraient des conflits de dépendances de pairs - Commitez toujours package.json et package-lock.json ensemble après avoir testé les mises à jour
- Utilisez le champ
overridesde npm pour forcer des versions spécifiques de dépendances transitives lors du traitement de vulnérabilités
Pourquoi les mises à jour aveugles cassent les builds
Le problème fondamental avec la gestion des packages JavaScript n’est pas de trouver les dépendances obsolètes—npm outdated s’en charge. Le problème est que mettre à jour vers la “dernière” version ignore les contraintes de dépendances de pairs, les limites semver, et la réalité que votre fichier de verrouillage existe pour une bonne raison.
Lorsque vous exécutez npm update, npm respecte les plages de versions dans votre package.json. Il ne sautera pas de ^2.0.0 à 3.0.0 même si la version 3 existe. C’est intentionnel. Mais cela signifie aussi que les véritables mises à jour nécessitant des changements de plage restent bloquées indéfiniment.
ncu résout ce problème en modifiant directement package.json—en mettant à jour les plages de versions—sans toucher à node_modules ni à votre fichier de verrouillage. Vous contrôlez quand l’installation se produit.
Workflows modernes avec ncu pour la gestion des dépendances Node.js
Les installations globales ne sont plus le modèle mental par défaut. Avec ncu v18+, exécutez-le directement via votre gestionnaire de packages :
npx npm-check-updates
# ou
pnpm dlx npm-check-updates
# ou
bunx npm-check-updates
Cela vérifie les mises à jour sans rien modifier. Vous voyez ce qui est disponible, avec un code couleur par niveau semver : rouge pour majeur, cyan pour mineur, vert pour patch.
Le flag critique est -u, qui écrit les changements dans package.json. Mais voici ce qui compte : cela ne met à jour que le manifeste. Votre fichier de verrouillage reste inchangé jusqu’à ce que vous exécutiez explicitement npm install.
Cette séparation permet un workflow de mise à jour de dépendances plus sûr :
- Exécutez
ncu -u --target minorpour mettre à jour package.json avec les changements non-incompatibles - Exécutez
npm installpour régénérer le fichier de verrouillage - Exécutez votre suite de tests
- Si les tests passent, commitez package.json et package-lock.json ensemble
Pour les mises à jour majeures, gérez-les individuellement avec ncu -u --filter package-name, examinez le changelog, puis testez.
Discover how at OpenReplay.com.
Dépendances de pairs et vérification de compatibilité
Les conflits de dépendances de pairs causent la plupart des échecs de mise à jour. Une bibliothèque de composants React peut nécessiter React 18, mais votre projet fixe React 17. Mettre à jour aveuglément la bibliothèque casse le build.
Le flag --peer de ncu vérifie la compatibilité des dépendances de pairs avant de suggérer des mises à jour. Cela empêche de proposer des mises à jour qui échoueraient immédiatement à l’installation.
Pour un contrôle plus strict, combinez ceci avec --target :
ncu --peer --target minor
Cela montre uniquement les mises à jour qui ne casseront pas les contraintes de pairs et ne franchiront pas les limites de versions majeures.
Fichiers de verrouillage et intégration dans les pipelines CI
Votre fichier de verrouillage représente un état de fonctionnement connu. Traitez-le en conséquence.
En CI, utilisez toujours npm ci au lieu de npm install. La commande ci échoue si package.json et package-lock.json sont désynchronisés—exactement ce que vous voulez. Cela détecte les situations où quelqu’un a mis à jour package.json mais a oublié de régénérer le fichier de verrouillage.
Pour les workflows automatisés de mise à jour de dépendances en CI, le pattern ressemble à :
ncu -u --target patch
npm install
npm test
Si les tests passent, le pipeline commite les changements. S’ils échouent, la mise à jour est signalée pour une révision manuelle.
Contrôle des dépendances transitives avec les overrides
Parfois, le problème n’est pas vos dépendances directes—c’est ce dont elles dépendent. Une vulnérabilité trois niveaux plus bas dans votre arbre de dépendances nécessite de mettre à jour un package que vous ne contrôlez pas.
Le champ overrides de npm vous permet de forcer des versions spécifiques de dépendances transitives :
{
"overrides": {
"vulnerable-package": "2.0.1"
}
}
Cela fait partie intégrante de la gestion des packages JavaScript. Utilisez-le lorsque vous avez besoin d’un correctif de sécurité avant que les mainteneurs en amont ne mettent à jour leurs dépendances.
Conclusion
L’automatisation des mises à jour de dépendances ne signifie pas tout mettre à jour constamment. Cela signifie avoir un processus répétable qui sépare la découverte de l’installation, respecte les limites semver, et maintient votre fichier de verrouillage synchronisé avec votre manifeste.
ncu s’intègre dans ce workflow car il traite les mises à jour de package.json comme une étape distincte. Vous décidez quoi mettre à jour, quand installer, et quand tester. L’outil gère la partie fastidieuse—vérifier les registres et modifier les plages de versions—tout en vous laissant les décisions importantes.
Mettez à jour les patchs chaque semaine. Révisez les mineurs mensuellement. Gérez les majeurs délibérément. Gardez votre fichier de verrouillage commité. Votre CI vous remerciera.
FAQ
npm update installe des versions plus récentes dans les plages de versions existantes de votre package.json mais ne franchira pas les limites de versions majeures. npm-check-updates modifie les plages de versions dans package.json lui-même, vous permettant de mettre à jour vers n'importe quelle version, y compris les versions majeures. ncu modifie le manifeste tandis que npm update modifie node_modules.
Oui. ncu fonctionne avec n'importe quel gestionnaire de packages puisqu'il ne modifie que package.json. Exécutez-le avec pnpm dlx npm-check-updates ou npx npm-check-updates quel que soit votre gestionnaire de packages. Après que ncu a mis à jour votre package.json, utilisez votre gestionnaire de packages préféré pour installer les dépendances mises à jour.
Utilisez le flag reject avec un nom de package ou un pattern. Par exemple, ncu --reject typescript exclut TypeScript des mises à jour. Vous pouvez aussi utiliser ncu --reject '/react.*/' pour exclure plusieurs packages correspondant à un pattern. C'est utile pour les packages que vous voulez mettre à jour manuellement.
Exécuter ncu -u ne modifie que package.json sans rien installer. Le risque vient de l'exécution de npm install ensuite sans tester. Exécutez toujours votre suite de tests après la mise à jour et l'installation. Commencez avec les mises à jour de patch en utilisant ncu -u --target patch pour l'approche la plus sûre.
Understand every bug
Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.