Retour au blog

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

21 juin 2026Dedimarco
npm pnpm javascript outils dépendances productivité
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 :

  1. Vérification initiale : installe et lance les tests pour s’assurer qu’ils passent
  2. Mise à jour optimiste : applique toutes les mises à jour d’un coup
  3. Si les tests échouent : restaure le state, puis procède par élimination binaire
  4. 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