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?
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 drapeauunsafe-perm
pour exécuter des scripts avec les privilèges root.
vos options sont:
-
Run
npm install
avec le drapeau--unsafe-perm
:[sudo] npm install --unsafe-perm
-
ajouter le drapeau
unsafe-perm
à votrepackage.json
:"config": { "unsafe-perm":true }
-
N'utilisez pas le script
preinstall
pour installer des modules globaux, les installer séparément et ensuite exécuter lenpm install
régulier sans privilèges root:sudo npm install -g coffee-script node-gyp npm install
Liées :
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
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.
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:
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