it-swarm-pt.tech

npm lança erro sem sudo

Acabei de instalar o node e o npm através do pacote em nodejs.org e sempre que tento pesquisar ou instalar algo com npm ele gera o seguinte erro, a menos que eu Sudo o comando. Tenho a sensação de que esta é uma questão 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
1082
Chad

Isso parece um problema de permissões em seu diretório inicial. Para recuperar a propriedade do diretório .npm execute:

Sudo chown -R $(whoami) ~/.npm
1955
Noah

As permissões que você usou ao instalar o Node serão necessárias ao fazer coisas como escrever no npm directory (npm link, npm install -g, etc.).

Provavelmente você executou a instalação de nós com permissões de root, é por isso que a instalação global de pacotes está pedindo para você ser o root.


Solução 1: NVM

Não hackear com permissões, instale o nó da maneira correta.

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

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

  1. Nó de Desinstalação (provavelmente será necessária permissão de root). Isso pode ajudá-lo.
  2. Então instale NVM seguindo as instruções nesta página .
  3. Instalar o nó via NVM: nvm install node

Agora npm link, npm install -g não exigirá mais que você seja root.

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


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

Não hackear com permissões, instale os pacotes npm globalmente da maneira certa.

Se você está no OSX ou Linux, você pode criar um diretório dedicado ao usuário para o seu pacote global e setup npm e node para saber como encontrar pacotes instalados globalmente.

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

Veja também: documentação do npm em Fixando permissões npm .

519
Yves M.

Além disso, você precisará da permissão de gravação no diretório node_modules

Sudo chown -R $USER /usr/local/lib/node_modules
382
Xilo

Eu 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 as permissões no seu diretório home, como Noah Diz:

    Sudo chown -R `whoami` ~/.npm
    
  2. Você também precisa de permissões de gravação para o diretório node_modules, como Xilo Diz, então se ainda não estiver funcionando, tente:

    Sudo chown -R `whoami` /usr/local/lib/node_modules
    
  3. Se você ainda estiver vendo erros, também poderá precisar corrigir as permissões /usr/local :

    Sudo chown -R `whoami` /usr/local
    

Por favor, note que, conforme indicado neste post/usr/local/ não é realmente um diretório do sistema se você estiver em um Mac, então, esta resposta é realmente perfeitamente "segura" para usuários de Mac. No entanto, se você estiver no Linux, veja Christopher Will 's resposta abaixo para uma solução multi-user friendly, sistema dir (mas mais complexa). 

54
danomarr

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

npm config set prefix ~/npm

Em seguida, adicione essa pasta ao seu caminho:

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

Veja @ErikAndreas ' answer to Os módulos NPM não serão instalados globalmente sem o Sudo e guia passo-a-passo mais longo by @sindresorhus com também define $MANPATH.

54
Joel Purra

Outras respostas estão sugerindo alterar propriedades ou permissões de diretórios do sistema para um usuário específico. Eu altamente deserdo de fazer isso, 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 de nó e adicione os usuários necessários a esse grupo. Em seguida, defina a propriedade de arquivos/diretórios dependentes de 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 facilmente instalar seus módulos como usuário

npm install -g generator-angular

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

Editar

3 anos depois eu recomendaria usar o Node Version Manager . Garante muito tempo e problemas.

35
Christopher Will

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

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

Em vez disso, faça:

Primeiro cheque, onde o npm aponta, se você ligar:

npm config get prefix

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

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

Isso cria um npm-Direktory no seu Home-Directory e aponta npm para ele.

Para que as 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
22
suther

A documentação oficial sobre como consertar permissões npm install com um erro EACCES está localizada em https://docs.npmjs.com/getting-started/fixing-npm-permissions

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

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, isso será / usr/local.

WARNING: Se o caminho exibido for apenas / usr, mude para Opção 2.

  1. Altere 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: Altere 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. 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 seu sistema:

    source ~/.profile
    
15
HoppyKamper

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

Sindre Sorus tem um guia Instale pacotes npm globalmente sem Sudo no OS X e Linux descrevendo como instalar de forma limpa sem mexer com 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 .bashrc/.zshrc:

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

    prefix=${HOME}/.npm-packages
    
  4. Assegure-se de que o nó os encontre. Adicione o seguinte ao seu .bashrc/.zshrc:

    NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
    
  5. Assegure-se de encontrar binários e man pages 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)"
    

Check out npm-g_nosudo para fazer os passos acima automagicamente

_/Confira o fonte deste guia para as atualizações mais recentes.

11
ptim

Quando você executar o npm install -g somepackage, poderá receber um erro EACCES solicitando que execute o comando novamente como root/Administrator. É um problema de permissões.

É fácil de consertar, abra o 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 alguma coisa), porque você pode obter alguns problemas mais tarde **

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

8
Juancarlos Rodríguez

TL; DR

use sempre Sudo -i ou Sudo -H ao executar npm install para instalar pacotes globais.

-

Quando você usa npm, ele faz o download dos pacotes para o diretório inicial do usuário. Quando você executa como Sudo, npm instala arquivos no mesmo diretório, mas agora eles são de propriedade de root.

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

  • instalar alguns pacotes locais sem problemas usando npm install foo
  • instalar o pacote global usando Sudo install -g foo-cli sem problema
  • tentativa de instalar o pacote local com npm install bar
  • fique frustrado com os designers npm agora que você tem que ir chmod um diretório novamente

Quando você usa a opção -i ou -H com Sudo, seu diretório pessoal será o diretório inicial do root. Qualquer instalação global armazenará em cache os pacotes em /root/.npm em vez dos arquivos root-owned em /home/me/.npm.

Apenas use sempre Sudo -i ou Sudo -H ao executar npm install para instalar pacotes globais e seus problemas de permissões npm irão derreter.

Para o bem.

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

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

8
rich remer

Para Mac (adotado da resposta de Christoper Will)

Mac OS X 10.9.4 

  1. Preferência do sistema> Usuários e grupos> (desbloquear)> pressione +: 

    Nova conta> "Grupo"
    Nome da conta: nodegrp 

    Depois de criar o grupo, marque o usuário para ser incluído nesse grupo

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

6
ken

No meu caso, é por causa da permissão do ~/tmp.Então eu faço:

Sudo chown -R $USER ~/tmp

E tudo bem!

5
bnPYSse

Eu tive um problema semelhante em módulos NPM não serão instalados globalmente sem Sudo , o problema era que quando eu instalei nó eu fiz isso com 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ós 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 fontes

cd node-v0.10.20 #enter pasta não compactada

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 você já possui. O problema desta abordagem é que você terá que ligar a pasta de instalação com a 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ê será capaz de fazer o seguinte sem usar o Sudo

npm install -g module_to_install

5
HeberLZ

No caso Sudo chown -R $(whoami) ~/.npm não funcionou para você, ou você precisa de uma solução de comando não terminal.

O problema é que a sua conta de usuário não tem permissão de gravação para a pasta node_modules, então você pode fazer o seguinte 

  1. Abra o Finder e pressione cmd + shift + g isso abrirá ir para pasta com url

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

  3. Clique com o botão direito do mouse na pasta node_modules e escolha Get Info

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

  5. Desbloqueie para poder fazer alterações.

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

  7. Certifique-se de escolher Read & Write no privilégio suspenso

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

3
Amr Labib

Para mim, execute somente

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!

3
user3753202

Foi assim que resolvi o problema no Windows 8.1:

  • Vá para o seu nodejs install (geralmente C:\Program Files\nodejs)
  • Clique com o botão direito do mouse na pasta node_modules e vá para propriedades
  • Clique na guia Segurança e avançado
  • No topo você verá "Owner: SYSTEM", clique em change
  • 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 "Substituir todas as entradas de permissão de objeto filho por entradas de permissão herdáveis ​​deste objeto" e clique em OK
  • Faça qualquer instalação/atualização do npm que você precisa
2
KCaradonna

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

Executar esse comando para alterar o proprietário para seu usuário atualmente conectado deve corrigir tudo e permitir que você instale pacotes globais do NPM sem Sudo.

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

osxhomebrew

2
Joel Purra

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

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

Abra um terminal:

comando + barra de espaço, em seguida, digite 'terminal'

Digite este comando: 

Sudo chown -R $ (whoami) $ (prefixo npm config )/{Lib/node_modules, bin, share}

  • Nota: isso exigirá sua senha.

Esta solução permite a permissão apenas para os diretórios necessários, mantendo os outros diretórios agradáveis ​​e seguros.

2
Matt

ISSUE: você (o usuário) não tem o conjunto correto de permissões para o diretório.

A saída imediata é 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.


Solution/Suggestion: Altera o diretório padrão do npm (de oficial docs )

Faça o 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 ~/.profile ou ~/.bash_profile e 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

2
Nabeel Ahmed

Se algo como abaixo aparece durante a instalação npm ou Quer instalar pacotes globalmente em um Mac use Sudo

npm ERR! código EACCES
npm ERR! errno -13
npm ERR! acesso syscall

1
Ignatius Andrew

Na verdade, eu também estava tendo o mesmo problema. Eu estava executando o Ubuntu. Meu problema surge porque eu perdi minha chave pública do Ubuntu. Mesmo atualizando meu sistema não estava acontecendo. Foi 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!

1
sam100rav

John Papa aponta para a história e raciocínio por trás deste problema e dá uma correção sólida :

Os passos de John Papa são para: 

  1. Use brew para instalar o nó sem npm
  2. Atualize seu .bash_profile/.bashrc para permitir 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!

1
theship

A resposta do @Yves M. foi muito semelhante à minha solução. Aqui estão os comandos que usei, que eram ligeiramente 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
0
Ryan Loggerythm

Eu resolvo mudando o dono 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.

0
Salem

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

  1. Primeiro instale o nodejs e o 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

    whoaminame__

  3. Você pode ver a lista de grupos que você está atribuído usando um comando muito simples, normalmente o primeiro grupo é o seu próprio nome de usuário

    groupsname__

  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. Atualize o npm e o nodejs

    npm install -g npm

Você está allset, seu usuário pode executar comandos npm sem Sudo

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

0
Gitesh Dalal

Aqui estão os passos, detalhadamente ...

  • Instale Node.js em nodejs.org/en/download

  • Atualize para a versão mais recente de npm: $ npm install npm -g

  • Crie uma nova pasta para os pacotes globais npm$ mkdir ~/.npm-packages

  • Diga npm onde encontrar/armazená-los $ npm config set prefix ~/.npm-packages

Verifique a instalação

# this should show the versions
node -v  
npm -v  
# this should show npm and ng with no errors
npm list -g --depth=0

Espero que funcione para você, funcionou para mim!

0
Carlos Abraham

Se a mudança de permissões para o diretório /usr/local/lib/npm_modules Não ajudar, você deve adicionar seu usuário ao grupo (na maioria dos casos é staff group), que possui direitos rwx para o diretório /usr/bin. Porque o npm tenta fazer symlink com /usr/bin/__package__.

P.S. Não se esqueça de relogar depois de alterar o grupo de usuários

0
Victor Perov

Esta é a solução que usei e trabalhei. Eu tentei utilizar whoami nunca 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

0
Casey Robinson

O que para mim parece que a melhor opção é a sugerida na npm documentation , que é primeiro verificar onde os node_modules globais são instalados por padrão executando npm config get prefix. Se você conseguir, como eu faço no Trusty, /usr, você pode querer mudá-lo para uma pasta que você pode seguramente possuir sem mexer as coisas do jeito que eu fiz.

Para fazer isso, escolha ou crie uma nova pasta no seu sistema. Você pode querer tê-lo em seu diretório home ou, como eu, sob /usr/local para consistência porque eu também sou um usuário de Mac (eu prefiro não olhar em lugares diferentes dependendo da máquina que eu esteja na frente) . Outra boa razão para fazer isso é o fato de que a pasta /usr/local provavelmente já está em seu PATH (a menos que você goste de mexer com seu PATH), mas as chances são de que sua pasta recém-criada não seja e você precise adicioná-la o PATH você mesmo em seu arquivo .bash-profile ou .bashrc.

Resumindo, mudei a localização padrão dos módulos globais com npm config set prefix '/usr/local', criei a pasta /usr/local/lib/node_modules (ela 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 qualquer módulo globalmente com segurança. Espero que isto ajude!

0
yago

você poderia tentar isso 

Sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
0
Adeojo Emmanuel IMM

Outra grande 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
0
Guillaume Le Mière