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
sudo chown
: github.com/sindresorhus/guides/blob/master/…Respostas:
Parece um problema de permissão no diretório inicial. Para recuperar a propriedade do diretório .npm , execute:
fonte
whoami
era um espaço reservado, mas funciona digitado literalmente como está, então deve ser uma variável que não entendo.whoami
garantir que ele é executado corretamente e, em seguida, colocado no comando chownsudo chown -R simpleascouldbe ~/.npm
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
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 -g
precisarã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.
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
Se você estiver no OSX ou Linux, poderá criar um diretório dedicado ao usuário para o seu pacote global e configurar
npm
enode
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 .
fonte
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.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 removidonpm
e instalado por meionvm
Você também precisará da permissão de gravação no
node_modules
diretório:fonte
~/tmp
diretório para mim.node_modules
em/usr/local/lib/
. wtf?Then I ran sudo chown -R $USER /* and everything was fine
- NÃO - você está arruinando sua máquina.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":
Em seguida, certifique-se de adicionar essa pasta ao seu caminho:
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
fonte
$HOME
, normalmente o seu.profile
script cuidará da$PATH
próxima vez que você o originar (por exemplo, na próxima vez que fizer login).$HOME
e 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,$PATH
em vez disso , defina-os explicitamente (em um script de horário de login).~/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~/bin
e~/lib
já existem.~/bin
e 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.)Encontrei isso ao instalar o Recess ( https://github.com/twitter/recess ) para compilar meu CSS para o Bootstrap 3.
Ao instalar o recesso:
Você precisa desbloquear permissões em seu
home
diretório, como Noah diz:Você também precisa de permissões de gravação no
node_modules
diretório, como o Xilo diz, portanto, se ele ainda não estiver funcionando, tente:Se você ainda estiver vendo erros, talvez também seja necessário corrigir as
/usr/local
permissões :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.fonte
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:
Se / usr for retornado, você poderá fazer o seguinte:
Isso cria um diretório npm no diretório inicial e aponta
npm
para ele.Para que essas alterações sejam permanentes, você deve adicionar o comando export ao seu .bashrc:
fonte
$PATH
, não a própria string. Você deveria mudar isso.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.
Agora você pode instalar facilmente seus módulos como usuário
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.
fonte
staff
grupo interno para conceder permissões às minhas pastas de desenvolvimento. Além disso, é uma boa ideia executarchmod g+ws node_modules
para garantir que seu grupo tenha permissão de leitura / gravação./usr/lib
está sob controle do seu gerenciador de pacotes do sistema e você não deve fazer alterações lá.A documentação oficial sobre como corrigir
npm install
permissões comEACCES
erro 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
Encontre o caminho para o diretório do npm:
Para muitos sistemas, este será / usr / local .
AVISO : Se o caminho exibido for apenas / usr , alterne para a Opção 2 .
Mude o proprietário dos diretórios do npm para o nome do usuário atual (seu nome de usuário!):
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.
Crie um diretório para instalações globais:
Configure o npm para usar o novo caminho do diretório:
Abra ou crie um arquivo ~ / .profile e adicione esta linha:
De volta à linha de comando, atualize as variáveis do sistema:
fonte
/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!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:
Confira a fonte deste guia para obter as atualizações mais recentes.
fonte
TL; DR
-
Quando você o usa
npm
, baixa 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 do root.Então é isso que acontece com absolutamente todas as pessoas que já usaram
npm
:npm install foo
sudo install -g foo-cli
sem problemasnpm install bar
npm
designers agora que você precisa acessarchmod
um diretório novamenteQuando você usa a opção
-i
ou-H
com o sudo, o diretório inicial serároot
o diretório inicial do. Qualquer instalação global armazenará em cache os pacotes em/root/.npm
vez dosroot
arquivos próprios em/home/me/.npm
.Sempre use
sudo -i
ousudo -H
ao executarnpm install
a instalação de pacotes globais e osnpm
problemas 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
.fonte
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
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
Com qualquer uma dessas abordagens, você poderá fazer o seguinte sem usar o sudo
fonte
sudo chown $USER /use/local
antes de construir. Parece bom até agora, hora de tentar construir átomo! Obrigado!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)
** 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/
fonte
sudo chown -R `whoami` ~/.npm
,sudo chown -R `whoami` /usr/local/lib
ePara Mac (adotado a partir da resposta de Christoper Will)
Mac OS X 10.9.4
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
fonte
sudo
ou 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.-H
sinalizador. Especificamentesudo -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 é usarsudo 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-H
sinalizador sudo para instalar adequadamente globalmente.No meu caso, é por causa da permissão de ~ / tmp.
E tudo bem!
fonte
Para mim, execute apenas
não funciona Então eu executo também
E tudo funciona bem!
fonte
/usr/lib
são arquivos do sistema e não devem pertencer à sua conta de usuário pessoal.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:
Crie um diretório para instalações globais:
mkdir ~/.npm-global
Configure o npm para usar o novo caminho do diretório:
npm config set prefix '~/.npm-global'
Abra ou crie um arquivo
~/.profile
ou~/.bash_profile
e adicione esta linha:export PATH=~/.npm-global/bin:$PATH
De volta à linha de comando, atualize as variáveis do sistema ou reinicie o terminal:
source ~/.profile
(opcional) Teste: faça o download de um pacote globalmente sem usar o sudo.
npm install -g jshint
fonte
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 sua conta de usuário não possui permissão de gravação na pasta node_modules, para que você possa fazer o seguinte
Abra o localizador e pressione
cmd
+shift
+g
para abrir, vá para a pasta com o URLEscreva o seguinte caminho
/usr/local/lib/node_modules
e pressione goClique com o botão direito na
node_modules
pasta e escolhaGet Info
Role para baixo até a
sharing & permissions
seçãoDesbloqueie para poder fazer alterações.
Pressione
+
e adicione sua conta de usuárioCertifique-se de escolher o
Read & Write
privilégio suspensoAgora você deve poder instalar pacotes sem
sudo
e os problemas de permissão devem ser resolvidosfonte
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:
Digite este comando:
Esta solução permite apenas os diretórios necessários, mantendo os outros diretórios em segurança e segurança.
fonte
npm config get prefix
retorna 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.Outra ótima correção aqui para configurar o NPM corretamente, execute os seguintes comandos:
fonte
você pode tentar isso, funciona no ubuntu e mac
fonte
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/local
buscar 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/local
pasta 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:Agora você pode instalar globalmente qualquer módulo com segurança. Espero que isto ajude!
fonte
Foi assim que resolvi o problema no Windows 8.1:
fonte
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
fonte
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.
fonte
Eu gosto de usar grupos do ubuntu para conseguir isso em vez de mudar de proprietário. É bem simples.
Primeiro instale nodejs e npm usando o apt-get
sudo apt-get update && sudo apt-get install nodejs npm
Descobrir quem está logado, ou seja, nome de usuário, execute o seguinte comando para vê-lo no terminal
whoami
Você pode ver a lista de grupos designados usando um comando muito simples, normalmente o primeiro grupo é o seu nome de usuário
groups
Execute o seguinte para permitir o acesso ao usuário conectado
sudo chmod 777 -R /usr/local && sudo chgrp $(whoami) -R /usr/local
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
fonte
No Mac OS X, ao instalar com o Homebrew
brew install npm
, o caminho da instalação é/usr/local/share/npm/
com ambasbin/
elib/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
.osx homebrew
fonte
npm config
lugar.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:
Depois disso, o npm funciona bem!
fonte
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:
Espero que isso ajude os curiosos!
fonte
Esta é a solução que utilizei 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
fonte
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.
Em seguida, consulte a versão mais recente:
Em seguida, instale a versão mais recente:
exemplo
fonte