Back

Comment corriger l'erreur EACCES: Permission Denied dans npm

Comment corriger l'erreur EACCES: Permission Denied dans npm

Vous lancez npm install -g pour installer un outil en ligne de commande et, au lieu d’une installation propre, vous obtenez ceci :

npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall access
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'

Cette erreur EACCES de npm est l’une des erreurs de permission Node.js les plus fréquentes rencontrées par les développeurs sur macOS et Linux. Voici pourquoi elle se produit et comment la corriger correctement.

Points clés à retenir

  • L’erreur EACCES survient parce que npm tente d’écrire dans un répertoire appartenant à root, comme /usr/local/lib/node_modules, auquel votre compte utilisateur n’a pas accès.
  • La solution recommandée consiste à installer Node.js via un gestionnaire de versions comme nvm, qui place tout dans votre répertoire personnel.
  • Vous pouvez également configurer npm pour utiliser un répertoire global appartenant à votre utilisateur en modifiant son préfixe et en mettant à jour votre PATH.
  • Évitez sudo npm install -g — cela engendre des problèmes de permissions à long terme et introduit des risques de sécurité.
  • Pour une utilisation ponctuelle d’un outil CLI, npx exécute des paquets sans nécessiter d’installation globale.

Pourquoi les erreurs de permission npm se produisent

Lorsque vous exécutez npm install -g, npm écrit dans un répertoire système comme /usr/local/lib/node_modules. Si vous avez installé Node.js à l’aide d’un installateur officiel ou d’un gestionnaire de paquets système, ce répertoire appartient généralement à root. Votre compte utilisateur ordinaire n’y a pas d’accès en écriture, ce qui fait échouer l’installation.

Il s’agit d’une fonctionnalité de sécurité des systèmes Unix, pas d’un bug. La solution n’est pas de contourner ces protections, mais de donner à npm un emplacement appartenant déjà à votre utilisateur.

Distinction importante : Cet article traite des erreurs de permission lors des installations globales. Si vous rencontrez des erreurs de permission à l’intérieur du dossier node_modules d’un projet local, la cause est différente — généralement un décalage de propriété des fichiers dans votre répertoire de projet.

Corriger les permissions d’installation globale npm : deux approches sûres

Option 1 : Réinstaller Node.js avec un gestionnaire de versions (recommandé)

npm recommande officiellement l’utilisation d’un gestionnaire de versions Node tel que nvm pour éviter complètement les erreurs EACCES. Lorsque nvm installe Node, il place tout dans votre répertoire personnel — un emplacement qui appartient à votre utilisateur par défaut. Aucun accès root n’est jamais nécessaire.

Installez nvm :

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh | bash

Puis installez Node :

nvm install --lts

Ensuite, npm install -g fonctionne sans sudo ni modification de permissions. En prime, nvm vous permet de basculer entre différentes versions de Node selon le projet — un avantage qu’aucune autre solution n’offre.

Remarque : Si vous avez déjà configuré un préfixe npm personnalisé, nvm gère son propre préfixe en interne. Ne combinez pas les deux approches dans le même environnement, car elles peuvent entrer en conflit.

Option 2 : Configurer un répertoire global npm appartenant à l’utilisateur

Si vous préférez ne pas utiliser nvm, vous pouvez rediriger l’emplacement d’installation globale de npm vers un répertoire appartenant à votre utilisateur. C’est l’alternative décrite dans la documentation officielle de npm.

mkdir ~/.npm-global
npm config set prefix '~/.npm-global'

Ajoutez ensuite le répertoire bin à votre PATH. Pour bash, ajoutez cette ligne à ~/.profile ou ~/.bashrc :

export PATH=~/.npm-global/bin:$PATH

Pour zsh, ajoutez la même ligne à ~/.zshrc, puis rechargez :

source ~/.zshrc

Vérifiez que cela fonctionne en installant un paquet sans sudo :

npm install -g npm-check-updates

Et sudo npm install -g alors ?

À éviter. Exécuter sudo avec npm installe des fichiers appartenant à root, ce qui engendre par la suite d’autres problèmes de permissions et introduit de réels risques de sécurité — un paquet malveillant ou compromis s’exécute alors avec des privilèges élevés. C’est une solution de contournement à court terme qui aggrave la situation.

Une alternative rapide : utiliser npx

Si vous n’avez besoin d’un outil CLI qu’occasionnellement, une installation globale peut être inutile. npx exécute des paquets sans les installer globalement, en utilisant un paquet local ou en en récupérant un temporairement :

npm create vite@latest

Aucune permission requise, aucun répertoire global impliqué.

Quelle solution choisir ?

SituationApproche recommandée
Développeur gérant plusieurs projetsnvm
Machine unique, sans besoin de changer de versionPréfixe npm personnalisé
Utilisation ponctuelle d’un outil CLInpx

Conclusion

La cause profonde des erreurs EACCES lors de npm install -g est presque toujours la même : npm tente d’écrire dans un répertoire appartenant à root. Corrigez ce décalage à la source — soit en utilisant nvm, soit en pointant npm vers un répertoire qui vous appartient — et l’erreur disparaîtra définitivement.

FAQ

Oui, mais ce n'est pas recommandé. Utiliser sudo installe des paquets appartenant à root, ce qui entraîne d'autres problèmes de permissions lorsque npm tente plus tard de les mettre à jour ou de les supprimer en tant qu'utilisateur ordinaire. Cela expose également votre système à des risques de sécurité, puisque tout script d'installation s'exécute avec des privilèges élevés. Utilisez plutôt nvm ou un préfixe personnalisé.

Les installations globales écrivent dans des répertoires système comme /usr/local/lib/node_modules, qui appartiennent à root sur la plupart des systèmes. Les installations locales écrivent dans un dossier node_modules à l'intérieur de votre répertoire de projet, qui vous appartient déjà. C'est pourquoi npm install fonctionne sans problème en local mais échoue en global sans configuration appropriée.

Oui, les paquets précédemment installés sous l'ancien préfixe ne seront pas disponibles depuis le nouveau. Vous devrez les réinstaller dans le nouvel emplacement. Listez vos anciens paquets globaux avec npm list -g --depth=0 avant de modifier le préfixe, puis réinstallez-les une fois le nouveau répertoire configuré et votre PATH mis à jour.

Généralement non. Windows utilise un modèle de permissions différent, et le chemin d'installation globale par défaut de npm sur Windows se trouve déjà dans le dossier AppData de l'utilisateur. Les erreurs EACCES sont presque exclusives à macOS et Linux, où les contrôles de propriété de fichiers de style Unix régissent l'accès en écriture aux répertoires système comme /usr/local.

Gain control over your UX

See how users are using your site as if you were sitting next to them, learn and iterate faster 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.

OpenReplay