npm lança erro sem sudo

1287

Acabei de instalar o node e o npm através do pacote no nodejs.org e sempre que tento pesquisar ou instalar algo com o npm, ele gera o seguinte erro, a menos que eu execute o comando sudo. Sinto que este é um problema de permissões? Eu já sou o administrador.

npm ERR! Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR!  { [Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/Users/chietala/.npm/-/all/.cache.json' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Darwin 12.2.0
npm ERR! command "node" "/usr/local/bin/npm" "search" "bower"
npm ERR! cwd /Users/chietala
npm ERR! node -v v0.10.4
npm ERR! npm -v 1.2.18
npm ERR! path /Users/chietala/.npm/-/all/.cache.json
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/chietala/npm-debug.log
npm ERR! not ok code 0
Chade
fonte
35
Por favor, considere a solução usando NVM : stackoverflow.com/a/24404451/1480391 (em vez de cortar com permissões)
Yves M.
2
@janaspage Você não pode instalar o nó ou o NVM (Node Version Manager) via NPM (Node Package Manager), isso não faz sentido. O NPM vem dentro do nó (é instalado ao mesmo tempo). Dê uma olhada na página da Wikipedia: en.wikipedia.org/wiki/Npm_(software)
Yves M.
5
Por fim, uma solução melhor que sudo chown: github.com/sindresorhus/guides/blob/master/…
Dmitri Zaitsev
No OSX e instalando o nó com o instalador oficial do pkg, essa solução não funcionou. Eu usei este em vez disso: stackoverflow.com/a/34968008/675565
fmquaglia
2
Ele explica o problema e a correção: docs.npmjs.com/getting-started/fixing-npm-permissions
n00b

Respostas:

2269

Parece um problema de permissão no diretório inicial. Para recuperar a propriedade do diretório .npm , execute:

sudo chown -R $(whoami) ~/.npm
Noé
fonte
102
Eu pensei que whoamiera um espaço reservado, mas funciona digitado literalmente como está, então deve ser uma variável que não entendo.
SimplGy 14/05
127
whoami é um comando shell real en.wikipedia.org/wiki/Whoami . Os acentos graves em torno de whoamigarantir que ele é executado corretamente e, em seguida, colocado no comando chown
Noah
13
você também pode especificar manualmente seu nome de usuário. Se o seu nome de usuário for "simpleascouldbe", o comando seriasudo chown -R simpleascouldbe ~/.npm
Noah
13
não npm não requer nem que você deve estar usando sudo - veja resposta abaixo @HeberLZ em particular a sua segunda opção em relação a: ./configure --prefix = xxxxxx
Scott Stensland
9
@ChristopherWill: Isso não está alterando a propriedade de um diretório do sistema. Isso está alterando a propriedade dos diretórios no diretório inicial do usuário, que deve pertencer ao usuário.
user4815162342
620

Permissões que você usou durante a instalação do nó serão necessários ao fazer coisas como escrever em seu diretório NPM ( npm link, npm install -g, etc.).

Você provavelmente executou a instalação do nó com permissões de root, é por isso que a instalação global do pacote está solicitando que você seja root.


Solução 1: NVM

Não corte com permissões, instale o nó da maneira certa.

Em uma máquina de desenvolvimento, você não deve instalar e executar o nó com permissões de raiz, caso contrário, coisas como npm link, npm install -gprecisarão das mesmas permissões.

O NVM (Node Version Manager) permite que você instale o Node sem permissões de root e também instale muitas versões do Node para jogar facilmente com eles. Perfeito para o desenvolvimento.

  1. Desinstalar nó (a permissão root provavelmente será necessária). Isso pode ajudá-lo.
  2. Em seguida, instale o NVM seguindo as instruções nesta página .
  3. Instale o nó via NVM: nvm install node

agora npm link,npm install -g não será mais necessário que você seja root.

Editar: consulte também https://docs.npmjs.com/getting-started/fixing-npm-permissions


Solução 2: instalar pacotes globalmente para um determinado usuário

Não faça invasões com permissões, instale os pacotes npm globalmente da maneira certa.

Se você estiver no OSX ou Linux, poderá criar um diretório dedicado ao usuário para o seu pacote global e configurar npmenode saber como encontrar pacotes instalados globalmente.

Confira este ótimo artigo para obter instruções passo a passo sobre a instalação global de módulos npm sem o sudo.

Consulte também: documentação do npm sobre Corrigindo permissões do npm .

Yves M.
fonte
32
De todas as soluções postadas, a solução NVM aqui forneceu os melhores resultados para mim. É altamente recomendável usar o NVM em vez de brincar com permissões.
wenincode
9
Essas instruções funcionaram muito bem. No entanto, você provavelmente desejará remover os módulos que instalou com o sudo antes de desinstalar o nodejs : npm ls -gp | awk -F/ '/node_modules/ && !/node_modules.*node_modules/ {print $NF}' | xargs npm -g rm- Eu tive que reinstalar o nodejs e em um shell raiz e desinstalá-los; caso contrário, você continuará a ter links simbólicos para yo, grunhido, etc.
Bruno Flávio
4
Esta é a melhor solução, eu removidos todos os módulos antes fazer sudo npm list -g --depth=0. | awk -F ' ' '{print $2}' | awk -F '@' '{print $1}' | sudo xargs npm remove -g stackoverflow.com/a/22290968/1449157 e depois removido npme instalado por meionvm
Fabio Antunes
3
Para obter instruções de desinstalação para uso nó este SO resposta stackoverflow.com/a/11178106/480031
seangates
3
Por que é bom usar o root para instalar o nó em uma máquina de produção?
Bruno Peres
401

Você também precisará da permissão de gravação no node_modulesdiretório:

sudo chown -R $USER /usr/local/lib/node_modules
Xilo
fonte
7
Bem como o ~/tmpdiretório para mim.
knownasilya
123
Não sei por que isso ainda é positivo. É uma prática muito ruim alterar a propriedade dos diretórios do sistema para um usuário específico! Consulte a resposta abaixo para outras soluções (como criar um grupo separado para usuários do nó).
Christopher Will
1
eu não tenho node_modulesem /usr/local/lib/. wtf?
Connor Leech
27
Faça o que fizer - ABSOLUTAMENTE, não execute 'sudo chmod -R whoami' em / usr / local / lib ou / usr / lib / você estragará seu arquivo sudoers e se odiará.
Qdeninja
7
todo mundo, por favor vote isso ... Then I ran sudo chown -R $USER /* and everything was fine- NÃO - você está arruinando sua máquina.
commonpike
75

Alterar o proprietário nas pastas "system-global" é um hack. Em uma nova instalação, eu configuraria o NPM para usar um local já gravável para programas "global do usuário":

npm config set prefix ~/npm

Em seguida, certifique-se de adicionar essa pasta ao seu caminho:

export PATH="$PATH:$HOME/npm/bin"

Consulte a resposta do @ErikAndreas para os módulos NPM não será instalada globalmente sem o sudo e o guia passo a passo mais longo do @sindresorhus com também conjuntos .$MANPATH

Joel Purra
fonte
Eu concordo plenamente, exceto que eu sugiro que, se você apenas definir o prefixo $HOME, normalmente o seu .profilescript cuidará da $PATHpróxima vez que você o originar (por exemplo, na próxima vez que fizer login).
Jess Austin
@JessAustin: Talvez, mas também trará mais confusão ao seu $HOMEe poderá interferir em outros (futuros?) Arquivos / subpastas NPM. Prefira manter os binários de diferentes gerenciadores de pacotes / idiomas / sistemas de construção separados e, $PATHem vez disso , defina-os explicitamente (em um script de horário de login).
Joel Purra
Eh, bagunça? Estamos apenas falando de módulos instalados globalmente em ~/lib/node_modules, com sua CLI associada, se houver algum, em ~/bin. Para muitos usuários, especialmente se eles não têm raiz, ambos ~/bine ~/libjá existem.
Jess Austin
@ JessAustin: também é uma questão de colisão de nomes para bibliotecas e binários. Digamos que você aponte o NPM para colocar binários ~/bine faça o mesmo para um ou dois gerenciadores de pacotes adicionais. Pode não acontecer hoje ou amanhã, mas há um risco claro de que dois pacotes de gerentes diferentes tenham uma colisão de nomes e substituam os arquivos uns dos outros. Esse é um caso bom o suficiente para eu ter prefixos separados. (Exemplos concretos seriam apreciados.)
Joel Purra
1
Isso deve ser aceito como a melhor resposta. Alterar pastas globais do sistema pode ser perigoso.
Vladimir Marton
58

Encontrei isso ao instalar o Recess ( https://github.com/twitter/recess ) para compilar meu CSS para o Bootstrap 3.

Ao instalar o recesso:

-npm install recess -g
  1. Você precisa desbloquear permissões em seu homediretório, como Noah diz:

    sudo chown -R `whoami` ~/.npm
  2. Você também precisa de permissões de gravação no node_modulesdiretório, como o Xilo diz, portanto, se ele ainda não estiver funcionando, tente:

    sudo chown -R `whoami` /usr/local/lib/node_modules
  3. Se você ainda estiver vendo erros, talvez também seja necessário corrigir as /usr/localpermissões :

    sudo chown -R `whoami` /usr/local

Observe que, conforme indicado nesta publicação, /usr/local/ na verdade, não é um diretório do sistema se você estiver em um Mac, portanto, essa resposta é realmente "segura" para os usuários de Mac. No entanto, se você estiver no Linux, consulte a resposta de Christopher Will abaixo para obter uma solução segura (mas mais complexa) para diretores de sistema e amigável para vários usuários.

danomarr
fonte
35
Esta é uma má ideia. Você provavelmente não deseja que os diretórios do sistema sejam de propriedade de um usuário específico. Além de sérias preocupações de segurança, isso também não é compatível com vários usuários.
Christopher Will
2
Sim, mas é uma ótima solução para um ambiente de desenvolvimento +2, especialmente se você já instalou o node.js e só precisa continuar agitando!
Elliotrock 18/09/14
Você realmente não deve possuir pacotes fora do seu diretório pessoal #
Ben
1
Se não estiver na sua pasta pessoal, é um diretório do sistema, apesar de qualquer reivindicação em contrário. Só porque não é usado pelo OS X, não significa que não seja um diretório do sistema.
rica Remer
53

Cuidado!!! Cuidado!!! Cuidado!!!

chown ou chmod NÃO é a solução, devido ao risco de segurança.

Em vez disso, faça:

Primeiro verifique para onde as npm apontam, se você chamar:

npm config get prefix

Se / usr for retornado, você poderá fazer o seguinte:

mkdir ~/.npm-global
export NPM_CONFIG_PREFIX=~/.npm-global
export PATH=$PATH:~/.npm-global/bin

Isso cria um diretório npm no diretório inicial e aponta npmpara ele.

Para que essas alterações sejam permanentes, você deve adicionar o comando export ao seu .bashrc:

echo -e "export NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=\$PATH:~/.npm-global/bin" >> ~/.bashrc
suther
fonte
devo mudar apenas para a opção 2 se obtiver / usr?
Albert Laure
3
Observe que o último comando realmente gera o conteúdo de $PATH, não a própria string. Você deveria mudar isso.
Veluria 11/12/19
1
Isso consertou! Obrigado. Eu estava ficando 'permissão negada, unlink '/ usr / bin / <pkg>'
valbaca
1
Esta é a melhor resposta. É a maneira recomendada de resolver o problema.
Paulo Coghi - Restabelece Monica
Por que chowning é um risco de segurança?
Frank
40

Outras respostas estão sugerindo alterar as propriedades ou permissões dos diretórios do sistema para um usuário específico. Eu desaconselho muito a fazê-lo, isso pode se tornar muito estranho e pode atrapalhar todo o sistema!

Aqui está uma abordagem mais genérica e segura que também suporta multiusuários.

Crie um novo grupo para usuários do nó e inclua os usuários necessários nesse grupo. Em seguida, defina a propriedade dos arquivos / diretórios dependentes do nó para esse grupo.

# Create new group
sudo groupadd nodegrp 

# Add user to group (logname is a variable and gets replaced by the currently logged in user)
sudo usermod -a -G nodegrp `logname`

# Instant access to group without re-login
newgrp nodegrp

# Check group - nodegrp should be listed as well now
groups

# Change group of node_modules, node, npm to new group 
sudo chgrp -R nodegrp /usr/lib/node_modules/
sudo chgrp nodegrp /usr/bin/node
sudo chgrp nodegrp /usr/bin/npm

# (You may want to change a couple of more files (like grunt etc) in your /usr/bin/ directory.)

Agora você pode instalar facilmente seus módulos como usuário

npm install -g generator-angular

Alguns módulos (grunt, bower, yo etc.) ainda precisam ser instalados como root. Isso ocorre porque eles criam links simbólicos em / user / bin /.

Editar

3 anos depois, recomendo usar o Node Version Manager . Isso economiza muito tempo e problemas.

Christopher Will
fonte
2
Se o nó for instalado por fontes, embora o multiusuário seja um problema, todos os módulos funcionariam perfeitamente sem o uso do sudo. Isso também é muito importante porque, no caso do módulo yeoman, as pessoas não podem atualizar geradores através sudoing a aplicação yeoman como não permitir a execução sudo :(
HeberLZ
1
No Linux, normalmente uso o staffgrupo interno para conceder permissões às minhas pastas de desenvolvimento. Além disso, é uma boa ideia executar chmod g+ws node_modulespara garantir que seu grupo tenha permissão de leitura / gravação.
jackvsworld
@jackvsworld Eu não estava ciente do grupo de funcionários. Eu acho que essa seria uma solução mais tranquila, já que não é necessário criar um novo grupo fictício ... embora isso seja menos explícito. Mas obrigado por esta entrada.
Christopher Will
De um modo geral, /usr/libestá sob controle do seu gerenciador de pacotes do sistema e você não deve fazer alterações lá.
rica Remer
23

A documentação oficial sobre como corrigir npm installpermissões com EACCESerro está localizada em https://docs.npmjs.com/getting-started/fixing-npm-permissions .

Encontrei esse problema após uma nova instalação do nó usando o .pkg instalador no OSX. Há ótimas respostas aqui, mas ainda não vi um link para npmjs.com.

Opção 1: altere a permissão para o diretório padrão do npm

  1. Encontre o caminho para o diretório do npm:

    npm config get prefix

Para muitos sistemas, este será / usr / local .

AVISO : Se o caminho exibido for apenas / usr , alterne para a Opção 2 .

  1. Mude o proprietário dos diretórios do npm para o nome do usuário atual (seu nome de usuário!):

    sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

    Isso altera as permissões das subpastas usadas pelo npm e algumas outras ferramentas ( lib / node_modules , bin e share ).

Opção 2: Alterar o diretório padrão do npm para outro diretório

Há momentos em que você não deseja alterar a propriedade do diretório padrão que o npm usa (por exemplo, / usr ), pois isso pode causar alguns problemas, por exemplo, se você estiver compartilhando o sistema com outros usuários.

Em vez disso, você pode configurar o npm para usar um diretório diferente completamente. No nosso caso, este será um diretório oculto em nossa pasta pessoal.

  1. Crie um diretório para instalações globais:

    mkdir ~/.npm-global
  2. Configure o npm para usar o novo caminho do diretório:

    npm config set prefix '~/.npm-global'
  3. Abra ou crie um arquivo ~ / .profile e adicione esta linha:

    export PATH=~/.npm-global/bin:$PATH
  4. De volta à linha de comando, atualize as variáveis ​​do sistema:

    source ~/.profile
HoppyKamper
fonte
1
Obrigado, este funcionou para mim como o soludion do chown não. Você me salvou.
fmquaglia
devo mudar apenas para a opção 2 se obtiver / usr?
Albert Laure
Adoro a opção 2 desta resposta. (1) Não possui as vulnerabilidades de segurança do uso do sudo, (2) preserva a arquitetura para outros usuários, (3) faz referência à documentação e (4) possui a linha de comando necessária entradas incluídas. Obrigado por adicionar!
Tom Tom
Então, o que acontece quando você instala algo que está vinculado /usr/bin/? Agora apenas seu usuário pode acessá-lo. Você efetua login como outra pessoa, ainda sem acesso, pois os arquivos estão realmente no diretório inicial de outro usuário!
Frans
Bom, este funcionou para mim. Obrigado pela explicação, além dos comandos.
FrankByte.com 29/08/19
12

Como se precisássemos de mais respostas aqui, mas de qualquer maneira ..

O Sindre Sorus tem um guia Instalar pacotes npm globalmente sem sudo no OS X e Linux, descrevendo como instalar corretamente sem mexer nas permissões:

Aqui está uma maneira de instalar pacotes globalmente para um determinado usuário.

  1. Crie um diretório para seus pacotes globais

    mkdir "${HOME}/.npm-packages"
  2. Consulte este diretório para uso futuro em seu arquivo .bashrc / .zshrc:

    NPM_PACKAGES="${HOME}/.npm-packages"
  3. Indique para npm onde armazenar seu pacote instalado globalmente. No seu $HOME/.npmrcarquivo, adicione:

    prefix=${HOME}/.npm-packages
  4. Verifique se o nó os encontrará. Adicione o seguinte ao seu .bashrc / .zshrc:

    NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
  5. Verifique se encontrará binários e páginas de manual instalados. Adicione o seguinte ao seu .bashrc/ .zshrc:

    PATH="$NPM_PACKAGES/bin:$PATH"
    # Unset manpath so we can inherit from /etc/manpath via the `manpath`
    # command
    unset MANPATH # delete if you already modified MANPATH elsewhere in your config
    MANPATH="$NPM_PACKAGES/share/man:$(manpath)"

Confira o npm-g_nosudo para executar as etapas acima automaticamente.

Confira a fonte deste guia para obter as atualizações mais recentes.

ptim
fonte
2
tx para a edição @AndyHayden :) Meu método preferido é sugerido nos comentários acima: use NVM! stackoverflow.com/a/24404451/1480391
ptim
A única solução que funcionou para mim que não envolve mexer nas permissões. Eu odeio o NPM e sua estupidez de permissões idiotas. Obrigado pela solução!
21919 RyanNerd
8

TL; DR

sempre use sudo -iou sudo -Hao executar npm installpara instalar pacotes globais.

-

Quando você o usa npm, baixa pacotes para o diretório inicial do usuário. Quando você executa como sudo, npminstala arquivos no mesmo diretório, mas agora eles são de propriedade do root.

Então é isso que acontece com absolutamente todas as pessoas que já usaram npm:

  • instale alguns pacotes locais sem problemas usando npm install foo
  • instalar pacote global usando sudo install -g foo-clisem problemas
  • tente instalar o pacote local com npm install bar
  • fique frustrado com os npmdesigners agora que você precisa acessar chmodum diretório novamente

Quando você usa a opção -iou -Hcom o sudo, o diretório inicial será rooto diretório inicial do. Qualquer instalação global armazenará em cache os pacotes em /root/.npmvez dos rootarquivos próprios em /home/me/.npm.

Sempre use sudo -iou sudo -Hao executar npm installa instalação de pacotes globais e os npmproblemas de suas permissões desaparecerão.

Para o bem.

http://hood.ie/blog/why-you-shouldnt-use-sudo-with-npm.html

- qv a resposta aceita para consertar um já fodido npm.

remer rico
fonte
melhor e simples correção #
Manjeet Singh
6

Eu tive um problema semelhante nos módulos NPM que não são instalados globalmente sem o sudo , o problema era que, quando instalei o nó, o fiz com o sudo via chris / lea ppa repo .

Minha solução foi desinstalar o nó e instalá-lo desta maneira:

Faça o download das fontes de nó estáveis ​​mais recentes em nodejs.org #no meu caso node-v0.10.20.tar.gz

tar -zxf node-v0.10.20.tar.gz #uncompress sources

cd node-v0.10.20 #enter pasta descompactada

sudo chown $ USER -R / usr / local

./configure --prefix = / usr / local && make && make install

PD: Se você não quiser alterar a propriedade da pasta / usr / local, poderá instalá-la em algum lugar que já possua. O problema dessa abordagem é que você precisará vincular a pasta de instalação à linha de comando bash, para que possamos usar o comando node mais tarde

mkdir ~ / opt

./configure --prefix = ~ / opt && make && make install

echo 'export PATH = ~ / opt / bin: $ {PATH}' >> ~ / .bashrc #ou ~ / .profile ou ~ / .bash_profile ou ~ / .zshenv, dependendo do sistema operacional atual

Com qualquer uma dessas abordagens, você poderá fazer o seguinte sem usar o sudo

npm install -g module_to_install

HeberLZ
fonte
1
Acabei usando esse método. Usou sudo chown $USER /use/localantes de construir. Parece bom até agora, hora de tentar construir átomo! Obrigado!
Prasanthv
6

Ao executar o npm install -g somepackage, você pode receber um erro do EACCES solicitando que execute o comando novamente como root / Administrator. É uma questão de permissões.

É fácil de corrigir , abra seu terminal (Aplicativos> Utilitários> Terminal)

sudo chown -R $USER /usr/local/lib/node_modules

** Eu recomendo fortemente que você não use o gerenciamento de pacotes com o sudo (sudo npm -g install something), porque você poderá obter alguns problemas posteriormente **

Referência: http://foohack.com/2010/08/intro-to-npm/

Juancarlos Rodríguez
fonte
Yay! esse fez comigo! depois de fazer os outros demais acima: sudo chown -R `whoami` ~/.npm, sudo chown -R `whoami` /usr/local/libe
Regis Zaleman
8
Isso pode causar problemas de permissão em muitos outros aplicativos, então sugiro que não faça isso. Por que trocar uma lata de minhocas por outra?
Brad Parks
1
Ou pelo menos refine-o para / usr / local / lib / node_modules.
Ken
Isso, isso e mais isso. Depois de bater minha cabeça contra uma parede, isso fez o truque. 1
dashard
Este foi o meu problema. Em um novo macbook (os x 10.10.3), as permissões em / usr / local / lib / node_modules eram: $ ll / usr / local / lib / node_modules total 0 drwxr-xr-x 3 24561 wheel 102B 31 de março 18:19 . drwxrwxr-x 4 24561 admin 136B 31 de março 18:19 .. drwxr-xr-x 26 65534 funcionários 884B 13 de abril 10:53 npm
tkane2000
5

Para Mac (adotado a partir da resposta de Christoper Will)

Mac OS X 10.9.4

  1. Preferências do Sistema> Usuários e Grupos> (desbloquear)> pressione +:

    Nova conta>
    Nome da conta "Grupo" : nodegrp

    Após criar o grupo, marque o usuário a ser incluído neste grupo

  2. sudo chgrp -R nodegrp / usr / local / lib / node_modules /
    sudo chgrp nodegrp / usr / bin / nó
    sudo chgrp nodegrp / usr / bin / npm
    sudo chown -R $ (whoami): nodegrp ~ / .npm

ken
fonte
1
Eu tive que mudar alguns dos caminhos para / usr / local / bin, mas, além disso, essa solução funcionou muito bem na minha máquina OX X 10.9 - obrigado!
splig
Má prática para alterar a propriedade dos diretórios do sistema.
50550 Remer rich remer
@richremer Acho que depende do que você está tentando alcançar. se a pasta estiver originalmente acessível apenas pelo sudoer, ela poderá ser alterada apenas dessa maneira. limitamos a alteração à pasta relacionada ao npm. Seria mais seguro manter sudoou alterar a propriedade do grupo de pastas para que possa ser modificado pelo usuário normal? Se o usuário normal não deve executar nenhuma ação nesta pasta, é claro que não deve alterar a propriedade do grupo na pasta.
ken
A coisa apropriada a fazer é instalar pacotes globais com o sudo, mas faça-o com o -Hsinalizador. Especificamente sudo -H npm install -g <pkg>. Isso garante o delineamento adequado das permissões das pastas do sistema e do usuário. O que você não quer fazer é usar sudo npm install -g, porque isso instala arquivos de propriedade raiz no diretório do usuário. Seria ótimo se o npm fosse inteligente o suficiente para fazer isso da maneira certa, mas não é, então você precisa usar o -Hsinalizador sudo para instalar adequadamente globalmente.
rich remer
4

No meu caso, é por causa da permissão de ~ / tmp.

sudo chown -R $USER ~/tmp

E tudo bem!

bnPYSse
fonte
4

Para mim, execute apenas

sudo chown -R $(whoami) ~/.npm

não funciona Então eu executo também

sudo chown -R $(whoami) /usr/lib/node_modules/
sudo chown -R $(whoami) /usr/bin/node
sudo chown -R $(whoami) /usr/bin/npm

E tudo funciona bem!

user3753202
fonte
Você é senhor muito incrível :)
user805981
Arquivos /usr/libsão arquivos do sistema e não devem pertencer à sua conta de usuário pessoal.
rica Remer
4

QUESTÃO : Você (o usuário) não possui o conjunto certo de permissões para o diretório.

A saída instantânea é executar a instalação do npm usando o sudo, mas isso pode causar o mesmo erro ou instalação incorreta.

E alterar a propriedade do diretório não é uma boa opção, um patch temporário.


Solução / sugestão : altere o diretório padrão do npm (de documentos oficiais )

Faça backup do seu computador antes de avançar.

(opcional) Caso você tenha uma instalação incorreta, primeiro desinstale-a:

npm uninstall <package-name>  # use sudo if you used it while installation
npm cache verify  # or, npm cache clean for npm version below 5.x.x 
  1. Crie um diretório para instalações globais:

    mkdir ~/.npm-global

  2. Configure o npm para usar o novo caminho do diretório:

    npm config set prefix '~/.npm-global'

  3. Abra ou crie um arquivo ~/.profileou ~/.bash_profilee adicione esta linha:

    export PATH=~/.npm-global/bin:$PATH

  4. De volta à linha de comando, atualize as variáveis ​​do sistema ou reinicie o terminal:

    source ~/.profile

  5. (opcional) Teste: faça o download de um pacote globalmente sem usar o sudo.

    npm install -g jshint

Nabeel Ahmed
fonte
3

Caso sudo chown -R $(whoami) ~/.npmnão funcionou para você, ou você precisa de uma solução de comando não terminal.

O problema é que sua conta de usuário não possui permissão de gravação na pasta node_modules, para que você possa fazer o seguinte

  1. Abra o localizador e pressione cmd+ shift+ gpara abrir, vá para a pasta com o URL

  2. Escreva o seguinte caminho /usr/local/lib/node_modulese pressione go

  3. Clique com o botão direito na node_modulespasta e escolhaGet Info

  4. Role para baixo até a sharing & permissionsseção

  5. Desbloqueie para poder fazer alterações.

  6. Pressione +e adicione sua conta de usuário

  7. Certifique-se de escolher o Read & Writeprivilégio suspenso

Agora você deve poder instalar pacotes sem sudoe os problemas de permissão devem ser resolvidos

Amr Labib
fonte
3

Problema: Você não tem permissão para gravar nos diretórios que o npm usa para armazenar pacotes e comandos globais.

Solução: permita permissão para npm.

Abra um terminal:

command + barra de espaço e digite 'terminal'

Digite este comando:

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
  • Nota: isso exigirá sua senha.

Esta solução permite apenas os diretórios necessários, mantendo os outros diretórios em segurança e segurança.

Matt
fonte
Voto negativo, porque definir a propriedade do usuário das pastas do sistema é um antipadrão e isso não explica isso. No caso especial que npm config get prefixretorna algo na pasta inicial, esta solução corrigirá as permissões, mas não soluciona o problema subjacente de instalar pacotes globais de maneira segura para um ambiente compartilhado.
50650 Remer rich remer
Isso reescreverá as permissões de uma grande parte do sistema operacional. Executar isso no Ubuntu, por exemplo, resultará no próprio comando "sudo" se tornando inutilizável.
Sahand Seifi
2

Outra ótima correção aqui para configurar o NPM corretamente, execute os seguintes comandos:

npm config set prefix '~/.npm_packages'
PATH=$PATH:$HOME/.npm_packages/bin; export PATH
Guillaume Le Mière
fonte
2

você pode tentar isso, funciona no ubuntu e mac

sudo chown -R $(whoami) /usr/local/lib/node_modules
Adeojo Emmanuel IMM
fonte
1
Eu corri isso e funcionou 100% para mim em um Mac: sudo chown -R $ (whoami) / usr / local / lib / node_modules
leeroya
1

O que para mim parece a melhor opção é a sugerida na documentação do npm , que é primeiro verificar onde os node_modules globais são instalados por padrão executando npm config get prefix. Se você receber, como eu faço no Trusty,/usr convém alterá-lo para uma pasta que você possa possuir com segurança sem estragar as coisas da maneira que eu fiz.

Para fazer isso, escolha ou crie uma nova pasta no seu sistema. Você pode querer tê-lo em seu diretório pessoal ou, como eu, /usr/localbuscar consistência, porque também sou usuário de Mac (prefiro não precisar procurar em lugares diferentes, dependendo da máquina em que estou na frente). Outro bom motivo para fazer isso é o fato de que a /usr/localpasta provavelmente já está no seu PATH (a menos que você goste de mexer com o PATH), mas é provável que a pasta recém-criada não esteja e você precisará adicioná-la ao diretório PATH você mesmo em seu arquivo .bash-profile ou .bashrc .

Para encurtar a história, alterei o local padrão dos módulos globais npm config set prefix '/usr/local', criei a pasta /usr/local/lib/node_modules(será usada pelo npm) e alterei as permissões para as pastas usadas pelo npm com o comando:

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

Agora você pode instalar globalmente qualquer módulo com segurança. Espero que isto ajude!

yago
fonte
1

Foi assim que resolvi o problema no Windows 8.1:

  • Vá para a instalação do nodejs (geralmente C: \ Arquivos de Programas \ nodejs)
  • Clique com o botão direito do mouse na pasta node_modules e acesse as propriedades
  • Clique na guia Segurança e avance
  • Na parte superior, você verá "Proprietário: SYSTEM", clique em alterar
  • Digite o usuário para o qual você deseja permissões e clique em OK
  • Marque a caixa na parte inferior das configurações avançadas "Substitua todas as entradas de permissão do objeto filho por entradas de permissão herdáveis ​​deste objeto" e clique em ok
  • Faça o que for necessário para instalar / atualizar o npm
KCaradonna
fonte
1

A melhor solução seria essa fornecida pela documentação do npm.


Para o Ubuntu, a solução sugerida é a opção 2

Breves etapas:
Crie um diretório para instalações globais:
mkdir ~/.npm-global

Configure o npm para usar o novo caminho do diretório: pode ajudá-lo a verificar se o prefixo foi atualizado ou não. O resultado seria <Seu diretório pessoal> /. Npm-global
npm config set prefix '~/.npm-global'
npm config get prefix

Abra ou crie um arquivo ~ / .profile e adicione esta linha:
export PATH=~/.npm-global/bin:$PATH

De volta à linha de comando, atualize as variáveis ​​do sistema:
source ~/.profile

Em vez das etapas 2 a 4, você também pode usar a variável ENV correspondente (por exemplo, se você não deseja modificar ~ / .profile):

NPM_CONFIG_PREFIX=~/.npm-global


Para Mac, a solução sugerida é a opção 3

No Mac OS, você pode evitar esse problema completamente usando o gerenciador de pacotes Homebrew

brew install node

Himanshu
fonte
Este NPM_CONFIG_PREFIX não funcionará. Este é um erro no npm-descriptiton. Veja meu post acima, como fazê-lo da maneira correta: stackoverflow.com/a/41395398/1256697
suther
1

Eu o resolvo alterando o proprietário da raiz para o meu nome de usuário

sudo chown -R me:me /home/me/.config/configstore/

me mude com seu nome de usuário e grupo.

Salem
fonte
1

Eu gosto de usar grupos do ubuntu para conseguir isso em vez de mudar de proprietário. É bem simples.

  1. Primeiro instale nodejs e npm usando o apt-get

    sudo apt-get update && sudo apt-get install nodejs npm

  2. Descobrir quem está logado, ou seja, nome de usuário, execute o seguinte comando para vê-lo no terminal

    whoami

  3. Você pode ver a lista de grupos designados usando um comando muito simples, normalmente o primeiro grupo é o seu nome de usuário

    groups

  4. Execute o seguinte para permitir o acesso ao usuário conectado

    sudo chmod 777 -R /usr/local && sudo chgrp $(whoami) -R /usr/local

  5. Atualizar npm e nodejs

    npm install -g npm

Você está pronto, seu usuário pode executar comandos npm sem sudo

Você também pode consultar este link https://askubuntu.com/a/1115373/687804

Gitesh Dalal
fonte
0

No Mac OS X, ao instalar com o Homebrew brew install npm , o caminho da instalação é /usr/local/share/npm/com ambas bin/e lib/node_modules/subpastas.

A execução desse comando para mudar de proprietário para o usuário conectado no momento deve corrigir tudo e permitir a instalação de pacotes globais do NPM sem sudo.

sudo chown -R $USER ~/.npm /usr/local/share/npm/

Joel Purra
fonte
1
Atualmente, eu recomendaria minha outra resposta a esta pergunta que usa em seu npm configlugar.
Joel Purra
0

Na verdade, eu também estava tendo o mesmo problema. Eu estava executando o Ubuntu. O meu problema surge porque eu perdi minha chave pública do Ubuntu. Mesmo atualizando meu sistema não estava acontecendo. Estava dando erro GPG. Nesse caso, você pode recuperar sua chave usando este comando:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <key in GPG error>

Depois disso, o npm funciona bem!

sam100rav
fonte
0

John Papa aponta a história e o raciocínio por trás desse problema e fornece uma solução sólida :

Os passos de John Papa são:

  1. Use o brew para instalar o nó sem npm
  2. Atualize seu .bash_profile / .bashrc para que o npm e o nó saibam onde instalar e encontrar pacotes
  3. Use brew para atualizar o nó e npm para atualizar-se

Espero que isso ajude os curiosos!

o navio
fonte
0

Esta é a solução que utilizei e trabalhei. Eu tentei utilizar whoaminunca funcionou.

sudo chown -R $USER /usr/local/lib/node_modules

então

sudo chown -R $USER /usr/local/bin/npm

então

sudo chown -R $USER /usr/local/bin/node

Casey Robinson
fonte
0

A resposta de @Yves M. foi muito semelhante à minha solução. Aqui estão os comandos que usei, que eram um pouco diferentes dos dele.

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash

Em seguida, consulte a versão mais recente:

nvm ls-remote

Em seguida, instale a versão mais recente:

nvm install YOUR_VERSION_HERE

exemplo

nvm install v5.8.0
Ryan Loggerythm
fonte