Erro: EACCES: permissão negada, acesso '/ usr / local / lib / node_modules' reage

298

O que pode estar causando o erro Error: EACCES: permission denied, access '/usr/local/lib/node_modules'?

npm ERR! path /usr/local/lib/node_modules
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall access
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!  { Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/usr/local/lib/node_modules' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/macbookmd101/.npm/_logs/2018-02-21T16_26_08_421Z-debug.log
hendra dedi
fonte
9
Consulte o guia oficial do NPM sobre como resolver isso: docs.npmjs.com/…
Dzhuneyt 10/10/1919

Respostas:

487

altere suas permissões de arquivo .. assim

verifique primeiro quem é o proprietário do diretório

ls -la /usr/local/lib/node_modules

está negando acesso porque a pasta node_module pertence à raiz

drwxr-xr-x   3 root    wheel  102 Jun 24 23:24 node_modules

portanto, isso precisa ser alterado alterando-se root para seu usuário, mas primeiro execute o comando abaixo para verificar seu usuário atual Como obtenho o nome do usuário ativo através da linha de comando no OS X?

id -un

OU

whoami

então mude o dono

sudo chown -R [owner]:[owner] /usr/local/lib/node_modules

OU

sudo chown -R ownerName: /usr/local/lib/node_modules

OU

sudo chown -R $USER /usr/local/lib/node_modules
okandas
fonte
3
Houve casos em que adicionar sudo no comando também não funcionou. Isso funcionou para mim e deve ser aceito como resposta.
Niroj Shr
1
Minha empresa usa o logon único do Microsoft Active Directory. Portanto, o nome do grupo possui barras e um espaço nele. O que torna isso um pouco mais difícil de fazer. O comando que eu usei foi sudo chown -R myuser:Company\\Domain\ Users /usr/local/lib/node_modules. Para listar corretamente o nome do grupo que eu fiz id -gn myuser.
23419 Patrick Patrick
44
Isso foi útil, mas quando executo o comando para alterar o proprietário que obtive illegal group name. Então mudei o comando para sudo chown -R ownerName: /usr/local/lib/node_modulese funcionou.
Midori
4
Embora essa seja a resposta certa, eu encontrei esse problema várias vezes e a melhor solução é usar o nvm. Dessa forma, você não precisará alterar o proprietário dos arquivos usando chown. github.com/nvm-sh/nvm
Roee
1
Em vez de procurar a permissão, é recomendado na documentação instalar o npm com o nvm. Veja stackoverflow.com/a/59575266/2311074
Adam
105

Para minimizar a chance de erros de permissão, você pode configurar o npm para usar um diretório diferente. Neste exemplo, você criará e usará um diretório oculto no seu diretório pessoal.

Faça backup do seu computador. Na linha de comandos, 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'

No seu editor de texto preferido, abra ou crie um

~/.profile

arquivo e adicione esta linha:

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

Na linha de comandos, atualize as variáveis ​​do sistema:

source ~/.profile

Para testar sua nova configuração, instale um pacote globalmente sem usar o sudo

Naveen Raju
fonte
18
Esta é a opção menos destrutiva na minha opinião. Também é recomendado no site da NPM .
17xande
Como alternativa, se você não quiser fazer isso npm config set prefix(especialmente se estiver escrevendo um instalador não raiz), pode substituir o PREFIXenv var ou fornecer a --prefixopção, que é equivalente a npm config set prefix. (não tenho certeza que substitui qual)
sofe
Isso funcionou perfeitamente para mim. Na minha opinião, essa resposta abre menos espaço para erros destrutivos e é muito simples de entender e implementar.
clockelliptic
1
Isto é o que estava procurando! Obrigado.
djangodude
Esta é a solução recomendada, na verdade, e a melhor a longo prazo.
Al-Mothafar 19/03
49

Tudo que você precisa fazer é adicionar USER ao proprietário de / local / lib

sudo chown -R $USER /usr/local/lib
Nizar
fonte
7
Se futuros leitores não entenderem as permissões, consulte a documentação oficial do NPM e corrija o problema corretamente. docs.npmjs.com/… . Especificamente, os futuros leitores provavelmente deve reinstalar npm com um gerente de versão de nó (recomendado)
ordonezalex
1
Isso é bem direto. Isso também significa que você nunca precisa se preocupar com nada na lib novamente; você possui / usr / local / lib.
Obinna Nnenanya 6/08/19
4
Esta não é uma boa solução. Ao correr acima, chownvocê corre o risco de destruir a estrutura de permissões de todo o seu sistema de arquivos.
Lars
3
Este comando arruinou todas as minhas permissões. Precisa recuperar novamente todas as coisas.
Azam Alvi
4
Para ser mais preciso, isso não está adicionando um proprietário. Isso está mudando o proprietário, que é muito mais destrutivo do que apenas adicionar e é quase tão destrutivo quanto sudo chmod -R 777 /.
SOFe 16/09/19
29

tente acrescentar sudo antes de qualquer comando que você esteja tentando.

assim: sudo npm install

O uso do sudo com um comando no Linux / UNIX geralmente eleva suas permissões aos níveis de superusuário. No Windows, a conta de superusuário geralmente é chamada de 'Administrador'. No Linux / Unix, a conta do superusuário geralmente é chamada de 'root'.

O usuário root tem permissão para acessar, modificar ou excluir quase qualquer arquivo no seu computador. Contas de usuário normais podem acessar, modificar ou excluir muitos menos arquivos. As restrições em uma conta normal protegem seu computador contra programas ou usuários não autorizados ou prejudiciais. Alguns processos exigem que você execute ações em arquivos ou pastas que você normalmente não tem permissão para acessar. Instalar um programa que todos possam acessar é uma dessas ações.

No seu caso, a execução do comando de instalação com o sudo fornece as permissões do superusuário e permite modificar arquivos que seu usuário normal não tem permissão para modificar.

Pradeep Kumar HK
fonte
57
evite usar o sudo ao instalar pacotes npm. Quanto mais fundo você seguir esse caminho, mais difícil será corrigi-lo depois. Apenas altere as permissões para a pasta npm, como indicado em outra resposta, e viva uma vida melhor.
Lukas Liesis
2
Isso pode funcionar, mas causará problemas contínuos ao longo do tempo. Evite isso se não desejar obter todos os tipos de erros de permissão negados. Como negado para a pasta de cache npm, negado para instalar e assim por diante.
Lukas Liesis 13/02/19
1
Esta resposta deve ser removida porque o uso do sudo antes da instalação de pacotes cria um precedente muito perigoso se o usuário não entender as permissões. Consulte a primeira resposta na qual você altera a propriedade do local do nó principal uma vez.
SeaWarrior404
19

Tentei a solução da resposta dada pelo @okanda, mas não funcionou para mim.

No entanto, funcionou perfeitamente quando fiz isso para várias pastas, como mencionado neste tópico: https://github.com/angular/angular-cli/issues/9676#issuecomment-464857493

sudo chown -R $USER /usr/local/lib/node_modules/
sudo chown -R $USER /usr/local/bin/
sudo chown -R $USER /usr/local/share/
Quentin
fonte
Obrigado, esta resposta me ajudou. Ubuntu 18.04.3
bakhti_UZB
Eu já tinha outras soluções funcionando antes, mas, por algum motivo, dessa vez, todas foram necessárias para trabalhar nas pastas. Obrigado. Mac v 10.15.2
Amir5000
1
É seguro executar no servidor de produção?
Cheezey
16

Ao instalar pacotes globais no ubuntu , você precisa de permissões especiais de gravação enquanto escreve na usr/binpasta. É por razões de segurança. Portanto, sempre que você instalar um pacote global, use:

sudo npm install -g [package-name]

Para o seu caso específico, será:

sudo npm install -g typescript
cinobili19
fonte
14

Parece que você está tendo problemas de permissão. Se você estiver instalando npm-packages, é possível que você esteja recebendo um EACCESerro ao tentar instalar um pacote globalmente. Isso significa que você não tem permissão para gravar nos diretórios npmutilizados para armazenar pacotes e comandos globais.

Tente executar comandos: sudo chmod u+x -R 775 ~/.npme sudo chown $USER -R ~/.npmou você pode simplesmente executar qualquer npmcomando com sudo, que deve começar a resolver o problema.

Se você estiver instalando um npm-packagelocal, deve estar no diretório do projeto local e pode tentar executar o sudo npm install <pkg-name>comando para instalar o pacote necessário. o objetivo do uso sudoé alterar as permissões do proprietário para permitir que o usuário atual seja autorizado a executar npmcomandos.

Eu recomendo que você dê uma olhada em https://docs.npmjs.com/getting-started/fixing-npm-permissions

Suhas Gavad
fonte
10

Eu estava tentando instalar o react expo e, além do sudo, tive que adicionar --unsafe-perm

como isso. Isso resolve meu problema

sudo npm install -g expo-cli --unsafe-perm
Furquan
fonte
@ Furquan, muito obrigado ... Funcionou para mim depois de tentar soluções diferentes.
AzeTech
@AzeTech, fico feliz que tenha ajudado: D
Furquan 11/11/19
9

Se você está enfrentando esse problema no seu Mac. Siga esses passos

Primeiro, verificando quem é o proprietário deste arquivo usando o comando abaixo

ls -la /usr/local/lib/node_modules

você encontrará algum arquivo como abaixo um deles está abaixo

drwxr-xr-x   3 root    wheel  768 May 29 02:21 node_modules

você notou que o arquivo acima é de propriedade do root, para fazer alterações internas, você precisa alterar o caminho do proprietário.

você pode usar check quem é o usuário atual por este comando

id -un (in my case user is yamsol)

e então você pode alterar chamando este comando (basta substituir seu nome de usuário por ownerName)

sudo chown -R ownerName: /usr/local/lib/node_modules

no meu caso, como você sabe, o usuário é "yamsol", chamarei esse comando dessa maneira

sudo chown -R yamsol: /usr/local/lib/node_modules

é isso aí.

adnan javed
fonte
8

Tenha cuidado com todas as respostas que alteram o proprietário de todos os diretórios em / usr / local Basicamente, não mexa no sistema linux !!!

Eu acho que a melhor maneira é usar sua própria pasta para localizar todos os pacotes globais: https://www.competa.com/blog/how-to-run-npm-without-sudo/

angelcervera
fonte
8

Você pode instalar o npm através do gerenciador de versão do Node ou de um instalador do Node. Nos documentos afirmava:

Não recomendamos o uso de um instalador do Node, pois o processo de instalação do Node instala o npm em um diretório com permissões locais e pode causar erros de permissão ao executar os pacotes do npm globalmente.

Como você possui o erro de permissão , provavelmente instalou o npm por meio de um instalador do Node e agora precisa reinstalá-lo com um nvm (gerenciador de versão do nó).

Felizmente, isso é muito simples. Você nem precisa remover sua versão atual do npm ou Node.js.

Tudo que você precisa fazer é

  1. Instale o nvm. Para OSX ou Linux Node, use:

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

    Isso cria uma pasta nvm no seu diretório pessoal.

Então

  1. Instale o npm e o node.js através do nvm. Para fazer isso, basta ligar

    nvm install stable

Agora você pode instalar o seu pacote global sem usar sudoou alterar o proprietário de node_modulesna usrpasta.

Adão
fonte
obrigado pela resposta Adam! apenas imaginando o que pode haver algumas complicações possíveis posteriormente no processo de configuração do ambiente / compilação?
吖 奇 说 - 何魏奇 Archy Will
também para elaborar, para as pessoas fish, a fim de funcionar corretamente, a nvm precisa de um invólucro de peixe github.com/FabioAntunes/fish-nvm
何魏奇 奇 说 - 何魏奇 Archy Will He
@ CH 奇 说 ARCHYSHUō Eu nunca ouvi falar de complicações ao instalar o nó com nvm. E como é recomendado nos documentos oficiais, parece-me o melhor caminho a seguir :)
Adam
7

Use este comando para instalar npm como o usuário sudo:

sudo npm install -g create-react-app 

em vez do npm, instale -g create-react-a pp.

Nimmi Verma
fonte
citando @ Lukas- usando o sudo ao instalar pacotes npm. Quanto mais fundo você seguir esse caminho, mais difícil será corrigi-lo depois. Apenas altere as permissões para a pasta npm, como indicado em outra resposta, e viva uma vida melhor.
सत्यमेव जयते
6

Consegui corrigir o problema usando o seguinte no mac.

sudo npm install -g @aws-amplify/cli --unsafe-perm=true
posha
fonte
6

Para usuários nvm

sudo chown -R $USER /home/bereket/.nvm/versions/node/v8.9.1/lib/node_modules 

e

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

substitua v8.9.1pela versão do nó que você está usando.

bereket gebredingle
fonte
Isso não funcionou para mim! Ainda obtendo o erro: npm ERR! Erro: EACCES: permissão negada, renomeie /home/samuel/.nvm/versions/node/v8.10.0/lib/node_modules/.staging/npm-90fab7c7/node_modules/columnify/node_modules/wcwidth/node_modules/defaults Parece ser algo com /.staging ..que essa pasta não existe após a tentativa de instalação. Você pode me ajudar com isso?
Samuel
@Samuel você executou esse comando? sudo chown -R $USER home/samuel/.nvm/versions/node/v8.10.0/lib/node_modules
Bereket gebredingle
5

Parece que você tentou instalar um pacote npm globalmente, e não localmente, como man npm installdescrito a seguir :

O argumento -g ou --global fará com que o npm instale o pacote globalmente, e não localmente.

Geralmente, quando você está configurando um projeto npm (entre muitos outros que você poderia ter), não é uma boa ideia instalar pacotes nos módulos globais do Node.js. (/ usr / local / lib / node_modules), como o log de depuração sugerido.

Em vez de usar -g, use --save, que salvará automaticamente o pacote como uma dependência do seu package.jsonarquivo:

Como isso:

$ npm install express-generator --save

$ cat package.json 
{
  "name": "first_app_generator",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
},
  "author": "ivanleoncz",
  "license": "MIT",
  "dependencies": {
    "express-generator": "^4.16.0"
  }
}

Mas, como as outras respostas mencionadas, se você for usar -g, precisará usá-lo sudo( se o usuário tiver privilégios de sudo: consulte / etc / sudoers ) ao executar npm install express-generator -g, mas, na verdade, não é uma boa ideia, possivelmente causando problemas de permissão.

AVISO PRÉVIO

Existem instruções para instalar express-generatorcom a -gopção, a fim de disponibilizar o script express-cli.jsno caminho do sistema, mas você também pode usar o script instalado localmente, localizado no node_modulesprojeto if your npm:

$ ./node_modules/express-generator/bin/express-cli.js --view=pug myapp

Se uma mensagem como / usr / bin / env: 'node': Nenhum arquivo ou diretório aparecer, instale nodejs-legacy(Debian / Ubuntu)

IMHO, usar -g(também usar sudo) é como dracones hic sunt , se você não tiver certeza das consequências.

Para mais informações:

ivanleoncz
fonte
4

Isso ocorreu como resultado de npmnão conseguir acessar seu node_modulesdiretório global localmente, executando

sudo chown -R Name: /usr/local/lib/node_modules

por exemplo

sudo chown -R developerayo: /usr/local/lib/node_modules

corrige o problema, agora você pode executar o comando que executou novamente.

Shodipo Ayomide
fonte
3

Simplesmente você pode mudar o proprietário ou simplesmente usar o sudo antes de comandar assim

sudo chown -R [owner]:[owner] /usr/local/lib/node_modules( mudar proprietário )

ou

sudo npm install -g json-server

é isso aí.

Shahid jafrey
fonte
3

Para linux / ubuntu se o comando

npm install -g <package_name>

npm WARN deprecated superagent@4.1.0: Please note that v5.0.1+ of superagent removes User-Agent header by default, therefore you may need to add it yourself (e.g. GitHub blocks requests without a User-Agent header).  This notice will go away with v5.0.2+ once it is released.

npm ERR! path ../lib/node_modules/<package_name>/bin/..

npm ERR! code EACCES

npm ERR! errno -13

npm ERR! syscall symlink

npm ERR! Error: EACCES: permission denied, symlink '../lib/node_modules
/<package_name>/bin/..' -> '/usr/local/bin/<package_name>'

npm ERR!  { [Error: EACCES: permission denied, symlink '../lib/node_modules/<package_name>/bin/..' -> '/usr/local/bin/<package_name>']

npm ERR!   cause:
npm ERR!    { Error: EACCES: permission denied, symlink '../lib/node_modules/<package_name>/bin/..' -> '/usr/local/bin/<package_name>'

npm ERR!      errno: -13,

npm ERR!      code: 'EACCES',

npm ERR!      syscall: 'symlink',

npm ERR!      path: '../lib/node_modules/<package_name>/bin/..',
npm ERR!      dest: '/usr/local/bin/ionic' },

npm ERR!   stack:
npm ERR!    'Error: EACCES: permission denied, symlink \'../lib/node_modules/ionic/bin/ionic\' -> \'/usr/local/bin/ionic\'',

npm ERR!   errno: -13,

npm ERR!   code: 'EACCES',

npm ERR!   syscall: 'symlink',

npm ERR!   path: '../lib/node_modules/<package-name>/bin/<package-name>',

npm ERR!   dest: '/usr/local/bin/<package-name>' }

npm ERR! 

npm ERR! The operation was rejected by your operating system.

npm ERR! It is likely you do not have the permissions to access this file as the current user

npm ERR! 

npm ERR! If you believe this might be a permissions issue, please double-check the

npm ERR! permissions of the file and its containing directories, or try running

npm ERR! the command again as root/Administrator (though this is not recommended).


npm ERR! A complete log of this run can be found in:

npm ERR!     /home/User/.npm/_logs/2019-07-29T01_20_10_566Z-debug.log

Correção: instalar com permissões de root

sudo npm install <package_name> -g

Srilakshmy Krishnan
fonte
3

Você precisa da permissão dos níveis de superusuário para instalar o React. No Linux / Unix, a conta do superusuário geralmente é chamada de 'root'.

Para obter privilégios de superusuário, execute o seguinte comando no seu terminal:

sudo -i

e então simplesmente execute o comando para instalar o React:

npm install -g create-react-app

No entanto, a equipe reactjs nos incentiva a usar o seguinte comando em vez de instalar um pacote global.

npx create-react-app app_name
Fatema T. Zuhora
fonte
1
Usar o sudo é uma proposta arriscada, alguns pacotes podem ser seguros, mas outros podem começar a fazer outra coisa e tirar proveito dos privilégios de root que você está concedendo. sudo executa os comandos subseqüentes como superusuário
rustyDev
Alguns pacotes, como create-react-appprecisam de privilégios de root, devem ser instalados como pacotes globais; caso contrário, você não poderá instalá-lo. No entanto, a equipe reactjs nos incentiva a usar o seguinte comando em npx create-react-app app_namevez de instalar um pacote global.
Fatema T. Zuhora
3

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

joe cutter
fonte
2

Ajudou apenas isso:

sudo chown -R ownerName: /usr/local/lib/node_modules
nicolas asinovich
fonte
2

Após uma longa pesquisa, entendi que nada é necessário para o Mac OS instalar o angular cli. Basta usar sudo npm install -g @angular/clio terminal e a senha será solicitada. Funcionou para mim.

Hemanth Paluri
fonte
2

Se você estiver executando o Linux (ou seja: Arch)

# npm -g install packageName

Por padrão, este comando instala o pacote em / usr / lib / node_modules / npm e requer privilégios de root para fazê-lo.

Para permitir instalações em todo o usuário

Para permitir instalações globais de pacotes para o usuário atual, configure a npm_config_prefixvariável de ambiente. Isso é usado por npm e fio.

~/.profile
PATH="$HOME/.node_modules/bin:$PATH"
export npm_config_prefix=~/.node_modules

Faça login novamente ou na fonte para atualizar as alterações.

Você também pode especificar o --prefixparâmetro para npm install. No entanto, isso não é recomendado, pois você precisará adicioná-lo sempre que instalar um pacote global.

$ npm -g install packageName --prefix ~/.node_modules

Então você não precisa mostrar a permissão da pasta

Duy Huy Hoang Do
fonte
1

Consegui me livrar desse problema instalando nvme definindo o nó para a versão mais recente.

  1. Instale nvmusando curl(para a versão mais recente, vá para nvm.sh )
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
  1. Listar versões de nó disponíveis
nvm ls

v10.12.0
padrão -> v10.12 (-> v10.12.0)
nó -> estável (-> v10.12.0) (padrão)
estável -> 10.12 (-> v10.12.0)
...

  1. Escolha qual versão do nó usar
nvm use v10.12

O nvm não é compatível com a opção npm config "prefix": atualmente definida como ""

  1. Execute isto para desmarcar a opção:
nvm use --delete-prefix v10.12.0

Após seguir os comandos acima, você poderá instalar o react / angular no Ubuntu.

VishnuB
fonte
1

Use 'sudo npm install xyz', ele funcionará.

Sohan
fonte
1

Basta adicionar "sudo" antes do comando npm. É isso aí.

Farrukh Ahmed
fonte
0

Usei o sudo, mas ele não resolveu o problema. Corrigi o problema alterando a permissão da pasta node_modules,

sudo chmod -R 777 node_modules

Se desejar, você pode substituir o 777 por qualquer outro código, se não definir a permissão para todos os usuários / grupos.

coder618
fonte
0

Para aqueles que ainda não conseguiram resolver o problema depois de usar as soluções acima mencionadas. Tente isto

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

Isso deve funcionar, felicidades!

dPac
fonte