npm-check-updates : maîtrisez vos dépendances JavaScript

npm-check-updates : maîtrisez vos dépendances JavaScript
Gérer les dépendances d’un projet JavaScript moderne, c’est un peu comme jardiner : si vous ne taillez pas régulièrement, les mauvaises herbes (versions obsolètes, failles de sécurité, code mort) finissent par envahir le terrain. Le réflexe npm update ne suffit pas — il ne met à jour que dans les limites des fourchettes semver déjà définies dans votre package.json. Pour vraiment contrôler vos dépendances, il y a npm-check-updates (alias ncu).
Le problème avec npm update
Avant de parler de la solution, comprenons pourquoi les commandes intégrées aux package managers ne suffisent pas.
| Commande | Ce qu’elle fait | Ce qu’elle ne fait PAS |
|---|---|---|
npm update |
Met à jour dans les limites des versions déclarées | Ne dépasse pas le ^ ou ~ existant |
pnpm update |
Idem (respecte les ranges) | Ne passe pas à la majeure suivante |
npm install pkg@latest |
Force une version | Fastidieux pour chaque dépendance |
npm outdated |
Liste les outdated | Ne modifie rien |
Concrètement, si votre package.json contient "express": "^4.18.0", npm update n’ira jamais chercher Express 5. Pour ça, il faut modifier manuellement le fichier ou utiliser un outil dédié.
C’est là que npm-check-updates entre en jeu.
Qu’est-ce que npm-check-updates ?
npm-check-updates est un utilitaire CLI qui met à jour votre package.json vers les dernières versions disponibles, indépendamment des fourchettes semver actuelles. Il préserve les opérateurs de version existants (^, ~, x, >), mais ajuste le numéro de version lui-même.
# Dans un projet existant
npx npm-check-updates
# Ou avec le raccourci
npx ncu
La sortie est colorée : rouge pour les mises à jour majeures, cyan pour les mineures, vert pour les patches. Un simple ncu -u écrit les changements dans package.json — il ne touche ni à node_modules ni au lockfile (c’est npm install qui s’en charge ensuite).
Installation et utilisation
Installation globale
npm install -g npm-check-updates
# ou avec pnpm
pnpm add -g npm-check-updates
# ou bun
bun add -g npm-check-updates
Une fois installé globalement, la commande ncu est disponible partout.
Usage sans installation (npx/dlx/bunx)
Pas envie d’installer ? Pas de problème :
# npm
npx ncu
# pnpm
pnpm dlx ncu
# bun
bunx ncu
Premier lancement
$ ncu
Checking package.json
[====================] 10/10 100%
eslint 7.32.0 → 8.0.0
prettier ^2.7.1 → ^3.0.0
svelte ^3.48.0 → ^3.51.0
astro 1.0.0 → 2.5.0
react 18.2.0 → 19.0.0
Run ncu -u to upgrade package.json
Les flags essentiels
–target : contrôlez le niveau de mise à jour
Le flag le plus utile pour une stratégie conservative :
# Patch uniquement (le plus sûr)
ncu --target patch
# Mineures et patches seulement
ncu --target minor
# Semver : reste dans la fourchette définie
ncu --target semver
# Latest (défaut) : va chercher la version la plus récente
ncu --target latest
Avec --target minor, votre Express ^4.18.0 passera à ^4.19.0 au maximum, sans risque de sauter vers la version 5.
Mode interactif (-i)
Quand vous voulez choisir manuellement quelles dépendances mettre à jour :
ncu -i
Ce mode affiche une liste avec des cases à cocher (espace pour sélectionner, entrée pour valider). Combiné avec --format group, il catégorise les mises à jour par type (majeures / mineures / patches).
Filtrer par dépendance (-f / –filter)
# Mettre à jour uniquement React et React DOM
ncu -u -f react,react-dom
# Exclure certains packages
ncu -u -x typescript,eslint
Mode docteur (–doctor) ou (-d)
La fonctionnalité la plus puissante pour les mises à jour à grande échelle :
ncu --doctor -u
Le mode docteur fonctionne en plusieurs étapes :
- Vérification initiale : installe et lance les tests pour s’assurer qu’ils passent
- Mise à jour optimiste : applique toutes les mises à jour d’un coup
- Si les tests échouent : restaure le state, puis procède par élimination binaire
- Rapport : identifie exactement quelle dépendance a cassé les tests et sauvegarde les upgrades fonctionnelles
# Avec des commandes personnalisées
ncu --doctor -u --doctorInstall "pnpm install" --doctorTest "pnpm test"
–dep : choisir quelle section cibler
# Uniquement les dépendances de production
ncu --dep prod
# Uniquement les devDependencies
ncu --dep dev
# Peer dependencies aussi
ncu --dep dev,optional,peer
–cooldown : un filet de sécurité anti-supply-chain
# Ignorer les versions publiées depuis moins de 7 jours
ncu --cooldown 7d
Ce flag évite d’installer des packages fraîchement publiés qui pourraient contenir des vulnérabilités ou des malwares — une précaution qui prend tout son sens après les incidents de supply chain de ces dernières années.
Un workflow safe et efficace
Voici la routine que j’utilise sur mes projets, et que je recommande :
# 1. Commiter l'état actuel
git add package.json package-lock.json
git commit -m "chore: snap avant mise à jour dépendances"
# 2. Patches en premier (sans risque)
ncu -u --target patch
npm install
npm test
# 3. Si OK → commit
git add -A
git commit -m "chore: patch deps"
# 4. Mineures ensuite
ncu -u --target minor
npm install
npm test
git add -A
git commit -m "chore: minor deps"
# 5. Majeures une par une
ncu -u -f express
npm install
npm test
Pour les mises à jour majeures, je préfère les traiter une par une avec --filter. Un changement de version majeure peut contenir des breaking changes subtils — une modification d’API, un comportement différent par défaut, un polyfill retiré. Le mode docteur (ncu --doctor -u) est parfait pour automatiser cette détection.
Les packages globaux aussi
npm-check-updates fonctionne aussi pour les packages installés globalement :
# Lister les packages globaux obsolètes
ncu -g
# Tout mettre à jour en une commande
ncu -gu
Pratique pour maintenir à jour des outils comme pnpm, typescript, eslint, ou prettier installés globalement.
Compatibilité avec tous les package managers
ncu ne modifie que le package.json ; il n’installe rien. Il est donc compatible avec tous les package managers :
# npm
npx ncu && npm install
# pnpm
pnpm dlx ncu && pnpm install
# bun
bunx ncu && bun install
# yarn
npx ncu && yarn install
Trucs et astuces
.ncurc : le fichier de configuration
Créez un fichier .ncurc.json à la racine de votre projet pour définir des règles globales :
{
"target": "minor",
"reject": ["typescript", "eslint"],
"dep": ["prod", "dev"],
"peer": true
}
Mise à jour récursive monorepo
# Parcourt tous les sous-projets
ncu --deep
# ou avec workspaces
ncu --workspaces
Format personnalisé
ncu --format group,ownerChanged,repo,time
Affiche les mises à jour groupées par type, avec le propriétaire du dépôt, un lien vers le repo GitHub et la date de publication de la version.
Sortie silencieuse pour CI
ncu --errorLevel 1
Retourne le code 0 si aucune mise à jour n’est disponible — idéal pour les pipelines CI.
Pourquoi je ne jure que par ncu
npm-check-updates transforme une corvée pénible (examiner chaque dépendance une par une) en une opération rapide, contrôlée et — osons le mot — agréable. Le fait de pouvoir séparer la décision de mise à jour (ncu -u) de l’installation (npm install) et du test (npm test) donne un contrôle granulaire qu’aucune autre approche n’offre.
La meilleure stratégie ? Mettre à jour souvent et par petits incréments. Un patch par semaine, plutôt que 50 majeures d’un coup avant une deadline. npm-check-updates rend cette discipline possible sans y passer des heures.
npm install -g npm-check-updates
# Essayez dès maintenant dans votre projet
ncu