Falha na instalação do Npm com "não é possível executar no wd"

153

Estou tentando configurar meu ambiente de nó em uma nova instância do Ubuntu 12.04, com o Nó 0.8.14 já instalado, mas tive problemas ao tentar executar npm install. Então, quando eu tento npm install, diz que preciso executá-lo como root ou 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.

Mas quando tenta executá-lo como sudo, ele diz o seguinte:

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

No meu package.json, ele contém os seguintes scripts:

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

O restante das devdependências são válidas, pois eu instalei tudo corretamente em minha própria máquina (Mac). Alguém tem idéia de por que isso está acontecendo?

EH
fonte

Respostas:

231

A documentação diz (também aqui ):

Se o npm foi invocado com privilégios de root, ele mudará o uid para a conta do usuário ou o uid especificado pela userconfiguração, cujo padrão é nobody. Defina o unsafe-permsinalizador para executar scripts com privilégios de root.

Suas opções são:

  1. Corra npm installcom a --unsafe-permbandeira:

    [sudo] npm install --unsafe-perm
  2. Adicione a unsafe-permbandeira ao seu package.json:

    "config": {
        "unsafe-perm":true
    }
  3. Não use o preinstallscript para instalar módulos globais, instale-os separadamente e execute o regular npm installsem privilégios de root:

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

Palavras-chave :

Dmitry Pashkevich
fonte
2
Desculpe, eu não vi isso até agora. Eu tentei o "permissivo inseguro" antes, mas também não funcionou. O problema ainda existe
EH
10
Isso funciona para mim: sudo npm install --unsafe-permno entanto sudo npm install, não, embora eu tenha adicionado "unsafe-perm":trueao package.json ... Não sei por quê #
Dmitry Pashkevich
8
Adicioná-lo à propriedade "config" no package.json realmente define "npm_package_config_unsafe_perm" para que a opção 2 não funcione. Veja: stackoverflow.com/questions/28763958/…
justmoon
'inseguro-perm': true também falhou para mim. É uma pena que não tenha dado o erro e o contexto (incluindo a alteração uid) na mensagem de erro, em vez de ocultar a causa da existência e dar algo enigmático, surpreendente e hostil.
Android.weasel
Enquanto npm install --unsafe-permtrabalha para mim, tentei seguir as implicações sobre a alteração da userconfiguração padrão . Foi o que fiz npm set user my_usere npm set group my_group, que adiciona as entradas correspondentes no .npmrcarquivo do usuário raiz . Mas o problema é que a node_modulesprópria pasta e suas subpastas ainda pertencem à raiz, o que não ajuda. Eu não conseguia descobrir nenhuma maneira de fazê-los não pertencer à raiz.
fulv
53

A única coisa que funcionou para mim foi adicionar um .npmrcarquivo contendo:

unsafe-perm = true

Adicionar a mesma configuração para package.jsonnão teve nenhum efeito.

Undistraction
fonte
36
na janela de encaixe:RUN npm set unsafe-perm true
Alexander Mills
se você estiver usando WSL, digite set unsafe-perm true. Isso irá ajudá-lo
Stas Panyukov
26

Eu experimentei o mesmo problema ao tentar publicar meu aplicativo nodejs em um servidor privado executando o CentOs usando o usuário root. O mesmo erro é disparado por "postinstall": "./node_modules/bower/bin/bower install" no meu arquivo package.json, portanto, a única solução que estava funcionando para mim é usar as duas opções para evitar o erro:

1: use a opção --allow-root para o comando bower install

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

2: use a opção --unsafe-perm para o comando npm install

npm install --unsafe-perm
Yassine Khachlek
fonte
12

OP aqui, eu aprendi muito mais sobre o nó desde que fiz essa pergunta. Embora a resposta de Dmitry tenha sido muito útil, o que finalmente fez por mim é instalar o nó com as permissões corretas.

Eu recomendo não instalar o nó usando nenhum gerenciador de pacotes, mas sim compilá-lo para que ele resida em um diretório local com permissões normais.

Este artigo fornece uma instrução passo a passo muito clara de como fazer isso:

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

EH
fonte
2

Corrigi isso alterando a propriedade /usr/locale ~/Users/user-nameassim:

sudo chown -R my_name /usr/local

Isso me permitiu fazer tudo sem sudo

Daniel O'Leary
fonte