Erreur 'EACCES' avec node.js (npm install)

Contexte

Sur OS X / Linux, pour du développement web necessitant certains modules applicatifs, on est amené a installer ces modules par la ligne de commande.

Ce peut être des éléments Python, Ruby avec les gems, etc. Ici il est question de node.js et surtout de son installeur bien pratique : npm, avec sa fonction

npm install nomdupackage

De très nombreux programmes en ligne de commande demandent à être installés avec npm, comme par exemple Yeoman, Grunt, Docpad, etc.

La plupart du temps tout se passe bien, mais de temps à autre vous rencontrerez l'erreur EACCES qui vous empêchera d'installer votre package.

Voici comment remédier à cette situation sans passer par le mode superuser.

L'erreur

Vous rencontrez une erreur EACCES lorsque vous essayez d'installer quelque chose avec npm, l'outil de node.js.

Par exemple, vous souhaitez générer un site web statique avec docpad, vous l'installez comme indiqué sur leur site avec la commande :

cd mondossier
npm install -g docpad

Et voici l'erreur fatale :

error: Something went wrong with the action
error: An error occured:
Error: EACCES, open '/Users/votrenomdutilisateur/www/tests/docpad/out/atom.xml'

Vous pourriez bien sûr forcer l'install avec sudo mais justement, il y a une meilleure solution.

La cause

L'erreur est causée par la gestion des droits, sous Linux comme sous OS X : le dossier .npm dans votre dossier User n'appartient pas au User mais à root.

La solution

Il faut redonner les droits à l'utilisateur sur le dossier de npm :

sudo chown -R votrenomdutilisateur ~/.npm

Si vous avez fait des installs en tant que superuser avec npm dans votre dossier de travail, il faut également lui redonner vos droits d'accès :

sudo chown -R votrenomdutilisateur /url/vers/mondossier

Il faut ensuite nettoyer le répertoire temporaire du dossier utilisateur :

rmdir ~/tmp

Vous pouvez à nouveau installer des éléments avec npm sans être obligé de passer en mode super user, ce qui facilite la gestion des fichiers et dossiers de votre projet en cours et évite les problèmes de sécurité liés à l'utilisation trop fréquente de sudo.

Auteur: Eric Dejonckheere