L'installation de Npm a échoué avec " ne peut pas s'exécuter dans wd"

j'essaie de configurer mon environnement de noeud sur une nouvelle instance Ubuntu 12.04, avec le noeud 0.8.14 déjà installé, mais j'ai rencontré des problèmes lorsque j'ai essayé d'exécuter npm install . Donc quand j'essaie npm install , il est dit que je dois l'exécuter comme root ou Administrator:

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 quand essayer de l'exécuter comme sudo, il dit ce qui suit:

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

dans mon paquet.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 de devdependencies sont valables puisque je l'ai installé correctement sur ma propre machine (Mac) Quelqu'un a une idée pourquoi ce qui se passe?

95
demandé sur Dmitry Pashkevich 2013-08-09 01:48:54

5 réponses

Le documentation dit (aussi ici ):

si npm a été invoqué avec les privilèges root, alors il changera l'uid vers le compte utilisateur ou l'uid spécifié par la configuration user , qui par défaut à nobody . Définissez le drapeau unsafe-perm pour exécuter des scripts avec les privilèges root.

vos options sont:

  1. Run npm install avec le drapeau --unsafe-perm :

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

    "config": {
        "unsafe-perm":true
    }
    
  3. N'utilisez pas le script preinstall pour installer des modules globaux, les installer séparément et ensuite exécuter le npm install régulier sans privilèges root:

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

Liées :

159
répondu Dmitry Pashkevich 2017-05-23 11:55:11

j'ai éprouvé le même problème en essayant de publier mon application nodejs dans un serveur privé tournant CentOs en utilisant root user. La même erreur est déclenché par "postinstall": "./node_modules/bower/bin/bower install" dans mon colis.donc la seule solution qui fonctionnait pour moi est d'utiliser les deux options pour éviter l'erreur:

1: utiliser l'option --allow-root pour la commande d'installation de bower

"postinstall": "./node_modules/bower/bin/bower --allow-root install"

2: Utilisation -- danger - option perm pour npm installer la commande

npm install --unsafe-perm
20
répondu Yassine Khachlek 2015-04-20 22:01:35

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

unsafe-perm = true

ajouter la même config à package.json n'a eu aucun effet.

12
répondu Undistraction 2018-02-14 22:22:26

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

je recommande fortement de ne pas installer de noeud en utilisant des gestionnaires 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 de comment faire:

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

9
répondu E.H. 2015-01-23 17:28:56

j'ai corrigé cela en changeant la propriété de /usr/local et ~/Users/user-name comme suit:

sudo chown -R my_name /usr/local

cela m'a permis de tout faire sans sudo

1
répondu Daniel O'Leary 2015-05-05 20:59:47