Lancer npm install et se heurter a un mur de texte rouge est un rite de passage pour tout developpeur JavaScript. Que ce soit une erreur de permissions sur macOS, un conflit de dependances dans un monorepo ou un cache corrompu en CI, la solution est generalement simple une fois que vous savez quoi chercher. Ce guide couvre chaque erreur courante de npm install, explique pourquoi elle survient et vous donne les commandes exactes pour la corriger.
Dictionnaire des erreurs : tableau de reference rapide
| Code erreur | Signification | Correction rapide |
|---|---|---|
| EACCES | Permission refusee â npm a tente d'ecrire dans un repertoire que vous ne possedez pas. | Utiliser nvm ou corriger la propriete du repertoire (voir ci-dessous). |
| ENOENT | Fichier ou repertoire introuvable â un chemin reference n'existe pas. | Supprimer node_modules et package-lock.json, puis reinstaller. |
| EPERM | Operation non permise â souvent un probleme de verrouillage de fichier sous Windows. | Fermer les editeurs/terminaux verrouillant le dossier, puis reessayer. |
| ERESOLVE | Conflit de dependances â deux packages necessitent des versions incompatibles d'une peer dependency. | Utiliser --legacy-peer-deps ou --force (voir section ci-dessous). |
| ERR_SOCKET_TIMEOUT | Timeout reseau â npm n'a pas pu atteindre le registre. | Verifier les parametres reseau/proxy ou changer de registre miroir. |
| code 1 | Un script de cycle de vie (preinstall, postinstall) a termine avec le code d'erreur 1. | Verifier que les outils de build (Python, node-gyp, compilateur C++) sont installes. |
EACCES : corriger les erreurs de permissions
C'est l'erreur la plus courante sur macOS et Linux. Elle se produit quand npm tente d'installer des packages globaux dans un repertoire systeme comme /usr/local/lib/node_modules.
Correction sur macOS / Linux (recommande : utiliser nvm)
La meilleure correction permanente est d'utiliser un gestionnaire de versions Node pour que npm installe dans votre repertoire personnel :
# Install nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
# Restart terminal, then install Node
nvm install --lts
nvm use --lts
# Verify â npm now installs to ~/.nvm/
which npm
# /home/youruser/.nvm/versions/node/v20.x.x/bin/npmAlternative : changer manuellement le repertoire par defaut de npm :
mkdir -p ~/.npm-global
npm config set prefix '~/.npm-global'
# Add to ~/.bashrc or ~/.zshrc:
export PATH=~/.npm-global/bin:$PATH
# Reload shell
source ~/.bashrcOption nucleaire (deconseille pour la plupart des utilisateurs) :
# NOT recommended â changes system directory ownership
sudo chown -R $(whoami) /usr/local/lib/node_modules
sudo chown -R $(whoami) /usr/local/bin
sudo chown -R $(whoami) /usr/local/shareCorrection sur Windows
Sous Windows, lancez votre terminal en tant qu'administrateur, ou mieux, utilisez nvm-windows :
# Install nvm-windows from:
# https://github.com/coreybutler/nvm-windows/releases
# Then in an elevated (Admin) PowerShell:
nvm install lts
nvm use lts
# Or fix npm prefix for current user:
npm config set prefix %APPDATA%\npmERESOLVE : corriger les conflits de dependances
Depuis npm 7, les conflits de peer dependencies font echouer l'installation par defaut. Vous verrez un diagramme en arbre montrant les packages en conflit.
Sortie d'erreur typique :
npm ERR! code ERESOLVE
npm ERR! ERESOLVE could not resolve
npm ERR!
npm ERR! While resolving: @some-org/some-package@2.1.0
npm ERR! Found: react@18.2.0
npm ERR! node_modules/react
npm ERR! react@"^18.2.0" from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer react@"^16.8.0 || ^17.0.0" from some-library@3.5.0
npm ERR! node_modules/some-library
npm ERR! some-library@"^3.5.0" from the root project--legacy-peer-deps vs --force
--legacy-peer-deps dit a npm d'ignorer completement les conflits de peer dependencies (meme comportement que npm 6). --force dit a npm d'installer quand meme. Quand utiliser chacun :
| Flag | When to Use |
|---|---|
| --legacy-peer-deps | Quand le decalage de peer dep est inoffensif (ex: React 18 vs 17). |
| --force | Quand vous voulez que npm recupere les packages meme si une copie en cache existe. |
# Option 1: Ignore peer deps (safest workaround)
npm install --legacy-peer-deps
# Option 2: Force install (overrides everything)
npm install --forceApproche preferee â epingler la dependance en conflit :
// In package.json â add "overrides" to pin the conflicting dep
{
"overrides": {
"some-library": {
"react": "^18.2.0"
}
}
}
// Then run:
// npm installCorruption de node_modules : quand et comment supprimer et reinstaller
Parfois node_modules se retrouve dans un etat corrompu. Les symptomes incluent des erreurs "Cannot find module" pour des packages presents dans package.json, ou des echecs de build etranges apres un changement de branche.
Quand supprimer node_modules
- Apres avoir change de branche avec des arbres de dependances differents.
- Apres avoir resolu des conflits de fusion dans package-lock.json.
- Quand "Module not found" apparait pour un package clairement installe.
- Apres une mise a jour de Node.js vers une nouvelle version majeure.
Comment faire une reinstallation propre
Commande multiplateforme (bash) :
rm -rf node_modules package-lock.json
npm installSous Windows (PowerShell) :
Remove-Item -Recurse -Force node_modules
Remove-Item package-lock.json
npm installAvec npx :
npx rimraf node_modules
npm installSi les problemes persistent, nettoyez aussi le cache npm :
npm cache clean --force
rm -rf node_modules package-lock.json
npm installConflits package-lock.json : strategies de fusion
Quand plusieurs developpeurs modifient les dependances, les conflits de fusion de package-lock.json sont quasi garantis. N'essayez jamais de les resoudre manuellement â le fichier est genere automatiquement.
Strategie de fusion recommandee
Accepter l'un ou l'autre cote du conflit (peu importe lequel) :
# Accept "theirs" (the incoming branch's version)
git checkout --theirs package-lock.json
git add package-lock.json
# OR accept "ours" (your branch's version)
git checkout --ours package-lock.json
git add package-lock.jsonRegenerer le fichier de verrouillage :
npm installCommiter le resultat :
git add package-lock.json
git commit -m "chore: regenerate package-lock.json after merge"Prevenir les conflits avec .gitattributes
Ajoutez ceci a votre .gitattributes pour resoudre automatiquement les conflits du fichier de verrouillage :
# .gitattributes
package-lock.json merge=oursIncompatibilite de version Node.js
Beaucoup de packages necessitent des versions specifiques de Node.js. Si votre version est trop ancienne (ou trop recente), npm install peut echouer avec des erreurs de compilation.
Verifier la version requise
Cherchez le champ engines dans package.json :
// package.json
{
"engines": {
"node": ">=18.0.0",
"npm": ">=9.0.0"
}
}
// Check your current version:
// node -v
// npm -vUtiliser nvm ou fnm pour changer de version
nvm (Node Version Manager) :
# List available versions
nvm ls-remote
# Install a specific version
nvm install 20
# Switch to a version
nvm use 20
# Set a default
nvm alias default 20fnm (Fast Node Manager) â alternative plus rapide :
# Install fnm (Rust-based, faster than nvm)
curl -fsSL https://fnm.vercel.app/install | bash
# Install and use a version
fnm install 20
fnm use 20
fnm default 20Creez un fichier .nvmrc a la racine du projet pour que toute l'equipe utilise la meme version :
# Create .nvmrc file
echo "20" > .nvmrc
# Team members just run:
nvm use
# or
fnm useProblemes CI/CD : builds Docker et GitHub Actions
npm install se comporte differemment dans les environnements CI. Le cache, les permissions et les parametres reseau necessitent une attention particuliere.
Builds Docker
Erreurs courantes dans les Dockerfiles :
# BAD Dockerfile â no layer caching, uses npm install
FROM node:20-alpine
WORKDIR /app
COPY . .
RUN npm install
CMD ["node", "index.js"]
# GOOD Dockerfile â proper layer caching, uses npm ci
FROM node:20-alpine
WORKDIR /app
# Copy package files first (layer caching!)
COPY package.json package-lock.json ./
# Use npm ci for deterministic installs
RUN npm ci --ignore-scripts
# Then copy the rest of the source
COPY . .
# Run any build steps after copy
RUN npm run build
CMD ["node", "index.js"]Points cles : copier d'abord les fichiers package pour le cache de couches, utiliser npm ci au lieu de npm install en CI (plus rapide et deterministe), utiliser --ignore-scripts si les scripts postinstall ne sont pas necessaires.
Cache GitHub Actions
Un cache correct peut reduire le temps d'installation de plus de 70% :
# .github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm' # Caches ~/.npm automatically
- run: npm ci # Deterministic install
- run: npm test
- run: npm run buildOrganigramme de decision : npm install a echoue â suivez ce guide
Utilisez cet organigramme pour diagnostiquer votre echec npm install :
1. Est-ce une erreur de permissions (EACCES / EPERM) ?
OUI -> Utiliser nvm ou corriger la propriete du repertoire.
2. Est-ce un conflit de dependances (ERESOLVE) ?
OUI -> Essayer d'abord --legacy-peer-deps, puis verifier l'epinglage de version.
3. Est-ce une erreur reseau (SOCKET_TIMEOUT / FETCH) ?
OUI -> Verifier proxy, VPN, ou changer de registre miroir.
4. Est-ce une erreur de build/compilation (node-gyp / code 1) ?
OUI -> Installer les outils de build (python3, make, g++ / Visual Studio Build Tools).
5. Est-ce "Cannot find module" ou un comportement etrange ?
OUI -> Supprimer node_modules + package-lock.json, puis npm install.
6. Toujours en echec ?
OUI -> Nettoyer le cache npm (npm cache clean --force), verifier la version Node, essayer un clone frais.
Questions frequemment posees
Comment corriger "npm ERR! EACCES: permission denied" sur Mac ?
La meilleure solution est d'installer Node.js via nvm (Node Version Manager) qui installe dans votre repertoire personnel et evite les problemes de permissions. Executez : curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash, puis nvm install --lts.
Que signifie "npm ERR! ERESOLVE could not resolve" ?
ERESOLVE signifie que deux ou plusieurs packages dans votre arbre de dependances necessitent des versions differentes et incompatibles de la meme peer dependency. Depuis npm 7, c'est une erreur bloquante. Ajoutez --legacy-peer-deps ou utilisez le champ overrides dans package.json.
Faut-il supprimer package-lock.json pour corriger les erreurs npm install ?
La suppression de package-lock.json devrait etre un dernier recours. Le fichier de verrouillage garantit des installations deterministes. Essayez d'abord de supprimer uniquement node_modules. Commitez toujours le fichier de verrouillage regenere.
Pourquoi npm install echoue dans Docker mais fonctionne localement ?
Causes courantes : execution en root sans --unsafe-perm, outils de build natifs manquants, ordre COPY empechant le cache de couches, .dockerignore n'excluant pas node_modules. Utilisez npm ci dans Docker.
Comment corriger "npm ERR! code 1" pendant npm install ?
Le code d'erreur 1 signifie generalement l'echec d'un script postinstall, souvent une compilation de module natif (node-gyp). macOS : xcode-select --install. Ubuntu/Debian : sudo apt install build-essential python3. Windows : Visual Studio Build Tools.
Quelle est la difference entre npm install et npm ci ?
npm install lit package.json et peut mettre a jour package-lock.json. npm ci (clean install) supprime node_modules, lit uniquement package-lock.json et installe les versions exactes. Utilisez npm ci en CI/CD et npm install en developpement local.