202 votes

L'installation de Npm a échoué avec "cannot run in wd".

J'essaie de mettre en place mon environnement Node sur une nouvelle instance d'Ubuntu 12.04, avec Node 0.8.14 déjà installé, mais je rencontre des problèmes lorsque j'essaie d'exécuter npm install . Donc quand j'essaie npm install il est dit que je dois l'exécuter en tant que Root ou administrateur :

Error: EACCES, mkdir '/usr/local/lib/node_modules/coffee-script'
npm ERR!  { [Error: EACCES, mkdir '/usr/local/lib/node_modules/coffee-script']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/usr/local/lib/node_modules/coffee-script',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/usr/local/lib/node_modules/coffee-script',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack: 
npm ERR!    [ 'DirWriter._create                 (/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23)',
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:37:53',
npm ERR!      'Object.oncomplete (fs.js:297:15)' ] }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

Mais lorsque j'essaie de l'exécuter en tant que sudo, le message suivant apparaît :

npm WARN cannot run in wd PackNodeDev@0.0.1-166 npm install -g coffee-script node-gyp (wd=/home/ubuntu/PackNode)

Dans mon package.json, il contient les scripts suivants :

"scripts": {
    "preinstall": "npm install -g coffee-script node-gyp",
    "start": "node server.js",
    "test": "mocha --require should --compilers coffee:coffee-script --colors"
 },

Le reste des dépendances est valide puisque je l'ai installé correctement sur ma propre machine (Mac). Quelqu'un a-t-il une idée de la raison pour laquelle cela se produit ?

285voto

Dmitry Pashkevich Points 4160

El documentation dit (également aquí ) :

Si npm a été invoqué avec les privilèges de Root, il remplacera l'uid par le compte d'utilisateur ou l'uid spécifié par la directive user qui a pour valeur par défaut nobody . Réglez le unsafe-perm pour exécuter scripts avec les privilèges Root.

Vous avez le choix :

  1. Exécuter npm install con el --unsafe-perm drapeau :

    [sudo] npm install --unsafe-perm
  2. Ajouter le unsafe-perm à votre package.json :

    "config": {
        "unsafe-perm":true
    }
  3. N'utilisez pas le preinstall script pour installer les modules globaux, installez-les séparément, puis exécutez la commande ordinaire npm install sans les privilèges de Root :

    sudo npm install -g coffee-script node-gyp
    npm install

Related :

89voto

Pedr Points 7873

La seule chose qui a fonctionné pour moi était d'ajouter un .npmrc fichier contenant :

unsafe-perm = true

En ajoutant la même configuration à package.json n'a pas eu d'effet.

15voto

Yitzchak Points 1374

!~~ Pour Docker ~~ !

@Alexander Mills réponse - je l'ai juste rendu plus facile à trouver :

RUN npm set unsafe-perm true

14voto

E.H. Points 3101

OP ici, j'ai appris beaucoup plus sur les nœuds depuis que j'ai posé cette question. Bien que la réponse de Dmitry ait été très utile, ce qui l'a finalement fait pour moi est d'installer node avec les permissions correctes.

Je recommande fortement de ne pas installer node à l'aide d'un gestionnaire de paquets, mais plutôt de le compiler vous-même afin qu'il réside dans un répertoire local avec des permissions normales.

Cet article fournit une instruction très claire, étape par étape, sur la manière de procéder :

https://www.digitalocean.com/community/tutorials/how-to-install-an-upstream-version-of-node-js-on-ubuntu-12-04

3voto

Daniel O'Leary Points 111

J'ai corrigé cela en changeant la propriété de /usr/local y ~/Users/user-name comme ça :

sudo chown -R my_name /usr/local

Cela m'a permis de tout faire sans sudo

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X