La instalación de Npm falló con "no se puede ejecutar en wd"

153

Estoy tratando de configurar mi entorno de nodo en una nueva instancia de Ubuntu 12.04, con el Nodo 0.8.14 ya instalado, pero me encontré con problemas cuando intento ejecutarlo npm install. Entonces, cuando lo intento npm install, dice que necesito ejecutarlo como root o administrador:

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.

Pero cuando intenta ejecutarlo como sudo, dice lo siguiente:

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

En mi package.json, contiene los siguientes scripts:

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

El resto de las dependencias de desarrollo son válidas ya que lo he estado instalando bien en mi propia máquina (Mac). ¿Alguien tiene idea de por qué sucede esto?

EH
fuente

Respuestas:

231

La documentación dice (también aquí ):

Si se invocó npm con privilegios de root, cambiará el uid a la cuenta de usuario o el uid especificado por la userconfiguración, que por defecto es nobody. Configure el unsafe-permindicador para ejecutar scripts con privilegios de root.

Sus opciones son:

  1. Corre npm installcon la --unsafe-permbandera:

    [sudo] npm install --unsafe-perm
  2. Agregue la unsafe-permbandera a su package.json:

    "config": {
        "unsafe-perm":true
    }
    
  3. No use el preinstallscript para instalar módulos globales, instálelos por separado y luego ejecute el regular npm installsin privilegios de root:

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

Relacionado :

Dmitry Pashkevich
fuente
2
Lo siento, no vi esto hasta ahora. Probé la "inseguridad permanente" antes pero tampoco funcionó. El problema aún existe
EH
10
Esto funciona para mí: sudo npm install --unsafe-permsin embargo, sudo npm installno lo hace, aunque agregué "unsafe-perm":truea package.json ... No estoy seguro de por qué
Dmitry Pashkevich
8
Agregarlo a la propiedad "config" en package.json en realidad establece "npm_package_config_unsafe_perm" para que la opción 2 no funcione. Ver: stackoverflow.com/questions/28763958/…
justmoon
'inseguro-permanente': verdadero también falló para mí. Es una pena que no haya dado el error y el contexto (incluido su cambio de UID) en el mensaje de error, en lugar de anular la causa de la existencia y dar algo críptico, sorprendente y hostil.
android.weasel
Si bien npm install --unsafe-permfunciona para mí, traté de seguir la implicación de cambiar la userconfiguración predeterminada . Así lo hice npm set user my_usery npm set group my_group, que agrega las entradas correspondientes en el .npmrcarchivo del usuario raíz . Pero el problema es que la node_modulescarpeta en sí y sus subcarpetas aún son propiedad de root, por lo que eso no ayuda. No pude encontrar ninguna manera de hacer que no sean propiedad de root.
fulv
53

Lo único que funcionó para mí fue agregar un .npmrcarchivo que contiene:

unsafe-perm = true

Agregar la misma configuración a package.jsonno tuvo ningún efecto.

Distracción
fuente
36
en la ventana acoplable:RUN npm set unsafe-perm true
Alexander Mills el
si está utilizando WSL, simplemente escriba set unsafe-perm true. Esto te ayudará
Stas Panyukov
26

He experimentado el mismo problema al intentar publicar mi aplicación nodejs en un servidor privado que ejecuta CentOs con un usuario root. "Postinstall" dispara el mismo error: "./node_modules/bower/bin/bower install" en mi archivo package.json, por lo que la única solución que funcionaba para mí es usar ambas opciones para evitar el error:

1: use la opción --allow-root para el comando de instalación de Bower

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

2: use la opción --unsafe-perm para el comando de instalación npm

npm install --unsafe-perm
Yassine Khachlek
fuente
12

OP aquí, he aprendido mucho más sobre el nodo desde que hice esta pregunta por primera vez. Aunque la respuesta de Dmitry fue muy útil, lo que finalmente lo hizo por mí es instalar el nodo con los permisos correctos.

Recomiendo no instalar el nodo utilizando ningún administrador de paquetes, sino compilarlo usted mismo para que resida en un directorio local con permisos normales.

Este artículo proporciona una instrucción paso a paso muy clara sobre cómo hacerlo:

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

EH
fuente
2

Lo arreglé cambiando la propiedad de /usr/localy ~/Users/user-nameasí:

sudo chown -R my_name /usr/local

Esto me permitió hacer todo sin sudo

Daniel O'Leary
fuente