Skip to content

une blague avec npm install

Emmanuel Gaillot edited this page Feb 6, 2013 · 1 revision

Ça se passe ainsi. Je me prépare à travailler sur un nouveau projet, et je crée un répertoire.

mkdir plouf

Pris dans mon élan, je commence à installer des modules node.js, sans avoir pensé à changer de répertoire. Et en plus, je décide contre tout bon sens d'installer les modules en local, mais avec l'utilisateur root.

sudo npm install mes-modules-pour-plouf

Puis je passe à autre chose parce que je suis une personne pressée. Disons que je me documente sur les plus beaux modules, voire s'il n'y en a pas déjà qui font ce que mon projet ferait. Bref, je passe à autre chose et je n'ai toujours pas commencé à coder.

Les semaines passent…

Je me mets à un nouveau projet. Parce que j'ai beau être une personne pressée, ça ne m'empêche pas d'avoir plein d'idées.

mkdir pouet

Cette fois, je pense à aller dans mon répertoire.

cd pouet

… Mais j'ai complètement oublié que j'avais installé des modules dans le répertoire parent, qui plus est dans un répertoire créé par root. Ce que je me rappelle, en revanche, c'est que je ne dois pas utiliser sudo pour installer les modules en local. Alors, j'y vais.

npm install mes-modules-à-pouet

Et là, paf, ça explose de partout. Insultes généralisées de la part de npm, je ris un bon coup, mais je ne sais pas comment m'en sortir.


Que s'est-il passé ?

npm sait regarder si par hasard il n'y a pas un répertoire d'installation de modules dans l'arborescence parente. Si c'est le cas, il cherche à les installer à cet endroit. Si on n'a pas les droits en écriture sur ce répertoire, npm lance une erreur.

Que faire ?

  1. Renommer le répertoire dans l'arborescence parente, dans lequel sont installés les modules.
  2. Vérifier si d'autres projets sont impactés par le fait que les modules de ce répertoire ne sont plus accessibles
  3. Si c'est le cas, réinstaller les modules dans les répertoire des projets
  4. Lorsque plus aucun projet n'est impacté, détruire le répertoire en question.
  5. Reprendre une activité normale : aller dans le projet sur lequel on veut travailler, installer dans ce répertoire-là les modules dont on a besoin.

D'une manière générale

  • Ne pas installer localement des modules avec sudo npm install
  • Utiliser à la racine du projet un descripteur de projet package.json (qu'on peut générer avec npm init)
Clone this wiki locally