Erro: EACCES: permissão negada

97

Eu executo npm install lodash, mas ele lança Erro: EACCES: erro de permissão negada . Eu sei que é um problema de permissão, mas até onde eu sei, a permissão sudo não é necessária para instalar o módulo de nó localmente. Se eu executar com sudo, ele será instalado dentro da pasta ~ / node_modules. drwxrwxr-x é a permissão de arquivo da pasta existente. Não consigo descobrir o que pode ter dado errado.

Abaixo está a mensagem de erro.

npm ERR! tar.unpack untar error /home/rupesh/.npm/lodash/4.13.1/package.tgz
npm ERR! Linux 3.13.0-88-generic
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "lodash"
npm ERR! node v4.3.1
npm ERR! npm  v2.14.12
npm ERR! path /home/rupesh/node_modules/lodash
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall mkdir

npm ERR! Error: EACCES: permission denied, mkdir '/home/rupesh/node_modules/lodash'
npm ERR!     at Error (native)
npm ERR!  { [Error: EACCES: permission denied, mkdir '/home/rupesh/node_modules/lodash']
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack: 
npm ERR!    [ '/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:35:25',
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:47:53',
npm ERR!      'FSReqWrap.oncomplete (fs.js:82:15)' ] }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/rupesh/Desktop/es6/npm-debug.log
xruptrônica
fonte
é o dono da pasta node_modulesraiz?
AJS
A pasta node_module ainda não foi criada dentro da pasta na qual pretendo instalar o lodash.
xruptronics
você executou o npm install em seu diretório / home / rupesh / ou algum outro diretório?
AJS
o caminho da pasta em que executo o npm install é ~ / Desktop / es6
xruptronics
qual é o resultado de ls -l ~/Desktop | grep es6certificar-se de que você é o proprietário do diretório es6
AJS

Respostas:

78

Este comando corrige o problema. Funcionou para mim:

sudo npm install -g --unsafe-perm=true --allow-root
Saniya syed qureshi
fonte
Para qualquer pessoa como eu, embora este comando pareça ter funcionado no momento da escrita, para o Node v10.10.0, recebi o seguinte erro: "npm ERR! Não é possível instalar / var / www / project: Nome do pacote ausente"
Wayne Smallman
1
Os sinalizadores --unsafe-perm = true --allow-root funcionaram para nós usando o node v10.15.0 para instalar como usuário root um aplicativo existente onde o node-sass não seria instalado. O comando exato que usamos para instalar o node-sass no diretório local na pasta node_modules foi # npm install --save-dev --unsafe-perm = true --allow-root node-sass @ mais recente
Peter Edwards
Você pode usar o root para resolver o problema (embora isso não seja recomendado).
Chris Marotta
Consegui fazê-lo funcionar usando esses sinalizadores, então realmente a resposta é: sudo npm install -g --unsafe-perm = true --allow-root <package-name> @ <version-name>
Frank Hu MSFT
45

Eu tenho o mesmo problema com a instalação do servidor webpack em globalmente, use as etapas deste URL Resolvi meu problema, trabalhar para você.

As etapas mencionadas acima Lá: Faça backup do seu computador antes de começar.

Faça um diretório para instalações globais:

1 mkdir ~/.npm-global

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

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

Abra ou crie um arquivo ~ / .profile e adicione esta linha:

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

De volta à linha de comando, atualize suas variáveis ​​de sistema:

4 -source ~/.profile

Teste: Baixe um pacote globalmente sem usar sudo.

npm install -g jshint

Em vez dos passos 2-4, você pode usar a variável ENV correspondente (por exemplo, se você não quiser modificar ~ / .profile):

NPM_CONFIG_PREFIX=~/.npm-global
Vishal Patel
fonte
1
trabalhou em Mojave. Muito obrigado após 4 a 5 horas de solução de problemas, isso resolveu o problema!
Johnny
11

Criar package.json usando npm init resolveu meu problema.

xruptrônica
fonte
Mas não tenho certeza de por que o arquivo package.json é necessário ao instalar o módulo de nó, pois o arquivo package.json não é atualizado ou usado no meu caso porque não usei --save ou --save-dev ou comando semelhante.
xruptronics
isso é estranho. Eu acho que alguma coisa estava bagunçada em sua conf npm e fazendo init resetá-lo, de qualquer forma deve ser um mistério para sempre, pois não consegui encontrar uma única referência a um problema semelhante em outro lugar.
AJS
Tive um problema semelhante com o npm 6.9.0 e isso funcionou para mim também.
Chris Marotta
11

Tive problema no Linux. eu escrevi

chown -R myUserName ./* 

na minha pasta de projeto.

Sergey
fonte
6
Muito não recomendado. Isso atinge todos os seus diretórios e remove os direitos de root de qualquer um deles. Se alguma coisa precisar ser definida como root, isso destruirá sua configuração atual.
Patrick Da Silva
7

Pelo que posso ver em seus logs que você postou:

npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_class: 'DirWriter',

O diretório /home/rupesh/node_modules/não tem as permissões necessárias para criar o diretório, portanto, execute chown -r rupesh:rupesh /home/rupesh/node_modules/isso para resolver o problema.

AJS
fonte
Fazendo chown -R rupesh: rupesh / home / rupesh / node_modules / e executando npm install lodash novamente instalado lodash dentro da pasta ~ / node_module. Mas desta vez não gera erro. Mas não é onde pretendo instalar.
xruptronics
sim, eu sei que você deve criar o projeto em seu diretório inicial, em vez de Desktop. O npm por algum motivo está instalando seus módulos /home/rupesh/node_modulespor algum motivo. Qualquer maneira de trabalhar em seu diretório inicial deve ser ideal de qualquer maneira
AJS
Acho que ~ / Projects / es6 é equivalente à estrutura ~ / Desktop / es6. O que estou tendo problemas para descobrir é por que node_modules não foi criado dentro da pasta es6 e por que o módulo lodash (ou qualquer outro) não está instalado dentro dela. Eu não tinha enfrentado esse problema antes, mas o que deu errado hoje é o que eu quero descobrir.
xruptronics
Sim, eu li meus dois comentários anteriores e percebi a estupidez :), bem, eu olhei em volta e não consegui encontrar ninguém com o mesmo problema. Seu código consegue encontrar o loadashmódulo ?.
AJS
6

Ele não tem permissão de gravação para others(rx). Tente com

chmod a+w <folder>

e repita.

Juanjo Salvador
fonte
2
Não chowntem a -ropção de evitar ter que usá-lo em todas as pastas do node_modules?
DrakaSAN
@Juanjo Salvador Não funcionou.Lança o mesmo erro.
xruptronics
@DrakaSAN sim, chown tem uma opção recursiva.
Juanjo Salvador
6

Isso resolveu meu problema imediatamente - mac Mojave 10.14.6 - PhpStorm.

Erro de rejeição não tratada: EACCES: permissão negada, mkdir '/Users/myname/.npm/_cacache/index-v5/fb/5a'

sudo chown -R $USER:$GROUP ~/.npm
sudo chown -R $USER:$GROUP ~/.config

Postagem original: https://stackoverflow.com/a/50639828

ulittle
fonte
4

FWIW Eu tive os mesmos sintomas, mas com um pacote diferente. Criando package.jsone executando npm initse não resolver o meu problema.

Neste sistema, aparentemente, novas pastas neste local estavam sendo criadas com permissões de root. Durante npm install, novas pastas são criadas. Isso fazia com que a instalação do npm falhasse parcialmente, mesmo com sudo.

A solução foi executar npm install appem um local diferente sem umask de raiz.

Courtney Schwartz
fonte
4

Tente dar todas as permissões para a pasta do seu projeto com o comando abaixo

sudo chmod -R 777 /yourProjectDirectoryName

correr com

sudo npm install lodash
Raj Gohel
fonte
É uma solução jr
Pablo Papalardo 23/03
Você pode nem precisar do 777. Para mim, o problema era que os # estavam muito baixos. (775 consertou.)
André
"Definir as permissões 777 para um arquivo ou diretório significa que ele será legível, gravável e executável por todos os usuários e pode representar um grande risco de segurança." - linuxize.com/post/what-does-chmod-777-mean
MillerC
4

Um problema relacionado:

3 horas perdidas em vários dias.

Em uma máquina AWS EC2, abaixo funcionou:

sudo chown -R $(whoami) /home/ubuntu/.cache
sudo chown -R $(whoami) /home/ubuntu/.config
sudo chown -R $(whoami) /home/ubuntu/.local
sudo chown -R $(whoami) /home/ubuntu/.npm
sudo chown -R $(whoami) /home/ubuntu/.pm2

Espero que ajude.

Manohar Reddy Poreddy
fonte
3

Resolvi esse problema alterando a permissão do meu diretório npm. Eu fui para o diretório global npm para mim, estava em

/home/<user-name>

Eu fui para este diretório digitando este comando

cd /home/<user-name>

e alterou a permissão da pasta .npm digitando este comando.

sudo chmod -R 777 ".npm"

Funcionou como um encanto para mim. Mas há uma falha de segurança com isso, ou seja, seu diretório global de pacotes é acessível a todos os níveis.

Aniruddh Agarwal
fonte
Por que você permitiria que o mundo inteiro acessasse essa pasta específica?
egdavid
2

Primeiro instale sem -g (global) na raiz. Depois de tentar usar -g (global) funcionou para mim.

Renjith
fonte
Funcionou !! No Mac, movi minha pasta de código para minha pasta raiz: HardDrive / e "npm install" funcionou perfeitamente. Então movi minha pasta de código de volta para onde eu queria dentro de HardDrive / users / myUserName / Projects / code, executei "npm install" novamente e, desta vez, funcionou.
Josh
2

LUBUNTU 19.10 / Mesmo problema em execução: $ npm start

despejo: Erro: EACCES: permissão negada, abra '/home/simon/xxx/pagebuilder/resources/scripts/registration/node_modules/.cache/@babel/register/.babel.7.4.0.development.json' no objeto. fs.openSync (fs.js: 646: 18) em Object.fs.writeFileSync (fs.js: 1299: 33) em salvar (/ home / simon / xxx / pagebuilder / resources / scripts / registration / node_modules / @ babel / register / lib / cache.js: 52: 15) em _combinedTickCallback (internal / process / next_tick.js: 132: 7) em process._tickCallback (internal / process / next_tick.js: 181: 9) em Function.Module.runMain (module.js: 696: 11) em Object. (/home/simon/xxxx/pagebuilder/resources/scripts/registration/node_modules/@babel/node/lib/_babel-node.js:234:23) em Module._compile (module.js: 653: 30) no Object .Module._extensions..js (module.js: 664: 10) em Module.load (module.js: 566: 32)

Parece que meu usuário padrão (administrador) não tinha direitos nos diretórios de módulo de nó.

Isso consertou para mim!

$ sudo chmod a+w node_modules -R ## from project root

Simon P
fonte
2

Tente usar o seguinte: Na linha de comando, em seu diretório inicial, 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'

Em seu editor de texto preferido, abra ou crie um arquivo ~ / .profile e adicione esta linha:

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

Na linha de comando, atualize suas variáveis ​​de sistema:

source ~/.profile

Teste o pacote de instalação globalmente sem usar sudo, espero que ajude

AyushKatiyar
fonte
1

Esta é a solução para usuários GNU / Linux (Debian) (substitua USERNAME pelo seu nome de usuário ):

sudo chown -R $USER:$(id -gn $USER) /home/USERNAME/.config
J-Snor
fonte
0

Remova a pasta dist e isso resolverá meu problema !!

Hekmat
fonte
0

No Windows acabou sendo que a porta já estava em uso pelo IIS.

Parar o IIS (clique com o botão direito, sair) resolveu o problema.

Atron Seige
fonte
0

Basta alterar o proprietário do node_modulesdiretório global para ser seu usuário:

sudo chown -R $USER:$GROUP /usr/local/lib/node_modules
didil
fonte
-3

Execute esses comandos e o problema será resolvido!

sudo chmod -R 777 /usr/local/bin
sudo chmod -R 777 /usr/local/lib/node_modules
Nitin Jha
fonte
Para /usr/locale todos os subdiretórios, as permissões devem rwxr-xr-xpertencer ao root. Os usuários do sistema podem ler e executar dentro desta estrutura de dir, mas não podem editar, criar arquivos. Dito isso, sua resposta sugere conceder permissões a todos. E, sem descrever como e o que será afetado, ou porque o problema será resolvido.
Kuliraj