NPM travou dando o mesmo erro EISDIR: Operação ilegal em um diretório, lido no erro (nativo)

102

Estou preso com esse erro, independentemente do diretório em que estou e do que digito depois de "npm" em cmd.exe. Aqui está o npm-debug.log:

0 info it worked if it ends with ok
1 verbose cli [ 'C:\\Program Files\\nodejs\\node.exe',
1 verbose cli   'C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js' ]
2 info using npm@2.14.12
3 info using node@v4.2.6
4 verbose stack Error: EISDIR: illegal operation on a directory, read
4 verbose stack     at Error (native)
5 verbose cwd C:\Users\me
6 error Windows_NT 6.1.7601
7 error argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js"
8 error node v4.2.6
9 error npm  v2.14.12
10 error code EISDIR
11 error errno -4068
12 error syscall read
13 error eisdir EISDIR: illegal operation on a directory, read
13 error eisdir This is most likely not a problem with npm itself
13 error eisdir and is related to npm not being able to find a package.json in
13 error eisdir a package you are trying to install.
14 verbose exit [ -4068, true ]

Eu tentei desinstalar / reinstalar nodejs várias vezes, eu até excluí as pastas npm e npm-cache em C: \ Users \ me \ AppData \ Roaming. Não tenho certeza do que deu errado para causar isso. Por um segundo estava funcionando bem e agora não consigo me livrar desse erro. A explicação no log não faz sentido, pois dá esse erro em qualquer diretório. Devo observar que executar um prompt de comando como administrador não dá esse erro. Estou puxando meu cabelo nesta sexta-feira à noite tentando consertar isso, qualquer ajuda seria muito apreciada!

AnotherMike
fonte
1
Estou descobrindo que esse erro é comum quando as pessoas atualizam o npm. Gostaria de saber se esse erro começou quando você atualizou o npm ou se você mesmo atualizou?
Clavin
É um computador novo, então instalei o node nos últimos dias. Acabei de fazer uma atualização no modo de administrador, mas não
tive

Respostas:

61

Encontrei o mesmo problema enquanto alterava algumas configurações de npm. Eu cometi um erro com um npm config setcomando e adicionei uma linha referindo-se a um diretório não existente para C:\Users\{User}\.npmrc. Depois de excluir essa linha manualmente de .npmrc, o problema desapareceu.

user1460043
fonte
1
Como sou idiota? Eu estava em uma subpasta ahahahah obrigado.
Sampgun
Eu também estava apontando cafile para uma pasta em vez de um arquivo real, e todos os npmcomandos pararam de funcionar completamente, nenhuma solução funcionou além da sua resposta, obrigado!
Giorgio Tempesta
194

EISDIR significa " Erro, é diretório ". Isso significa que o NPM está tentando fazer algo com um arquivo, mas é um diretório . No seu caso, o NPM está tentando " ler " um arquivo que é um diretório (Linha: 4). Como a operação não pode ser realizada, o erro é gerado.

Três coisas para ter certeza aqui.

  1. Certifique-se de que o arquivo existe. Caso contrário, você precisa criá-lo. (Se o NPM depender de alguma informação específica no arquivo, você precisará ter essa informação lá).
  2. Certifique-se de que é de fato um arquivo e não um diretório.
  3. Ele tem as permissões corretas. Você pode alterar o arquivo para ter todas as permissões com "sudo chmod 777 FILE_NAME". (Cuidado: Você está concedendo permissões de Leitura, Gravação e Execução para cada um nesse arquivo)
MauricioLeal
fonte
13
Esta deve ser a resposta aceita imo, pois contém informações sobre o problema, bem como uma solução
schu34
4
Como sou idiota? Eu estava em uma subpasta ahahahah obrigado.
Sampgun
4
Gastei 3 horas nisso. Eu tinha uma pasta chamada back-button.css. 3 horas eu nunca vou voltar. Graças a você não foi 4.
Loke
1
Consegui isso usando fs.writeFile - mas um erro impediu que meu programa passasse o FileName, então ele estava tentando escrever em uma pasta. Obrigado.
Nelles
1
Está correto. Enfrentei esse problema ao usar o nodemailer em um aplicativo de desktop NW.js enquanto escrevia o código para um gerenciador de e-mail. Também estava tentando ler o diretório em vez de ler um arquivo de imagem para enviar como anexo. Muito obrigado.
higiênico de
13

Tive o mesmo problema hoje depois de atualizar meu npm da versão 6.4.1 para a versão 6.5.0. Corrigi isso baixando o instalador .pkg (recomendado para a maioria dos usuários) do node.js e o executei depois.

PeeJee
fonte
Exatamente o
minha máquina tem a mesma versão npm instalada, mas ainda estou enfrentando o problema
Gaurav Paliwal
9

No meu caso, eu estava recebendo o "EISDIR: operação ilegal em um diretório, leia" porque no meu arquivo .angular-cli.json eu não estava fornecendo um caminho completo em "scripts:"

Por exemplo eu tive

"scripts": [
        "../node_modules/hammerjs",
        "../node_modules/moment"
      ],

Na verdade, deveria ter sido

"scripts": [
        "../node_modules/hammerjs/hammer.min.js",
        "../node_modules/moment/min/moment.min.js"
      ],
Roubar
fonte
7

Eu tive o mesmo problema no Mac OS X (instalado com homebrew), e o .npmrc não é o único nó de local armazenado nas variáveis ​​de configuração. Há um arquivo de configuração npmrc glocal em / usr / local / etc que você deve editar usando este comando:

sudo nano npmrc

Remova a ca=linha, ou qualquer que seja a definição de configuração que interrompeu sua instalação, salve o arquivo e tente o npm novamente, e você deverá vê-lo funcionando.

rncrtr
fonte
Que bom que pude ajudar.
rncrtr
4

Esses erros estranhos ocorreram recentemente na minha máquina OSX.

Eu poderia me ajudar de forma rápida e suja executando:

sudo chmod -R 777 /usr/local/lib/node_modules/

Algo parecia ter bagunçado os direitos de acesso de todos os módulos de nó globais.

datayeah
fonte
2

Para mim, a correção foi adicionar uma barra após o nome do diretório

Miniwe
fonte
1

Fazer uma desinstalação completa, incluindo a remoção de caminhos, etc e reinstalar, resolveu o problema, um problema muito estranho.

Como remover completamente o node.js do Windows

AnotherMike
fonte
Em primeiro lugar, não gostei da sua resposta, mas devo confessar que me aconteceu o mesmo. Criar um novo meteorprojeto com --reactcausou esse problema, mas excluir o projeto e recriá-lo funcionou (OS X).
Hola Soy Edu Feliz Navidad
1

Eu tive esse problema com gulp. O problema é que o gulp adicionou uma dependência ao meu arquivo de origem e acho que o npm tentou abri-lo:

{
  "name": "name",
  "version": "2.0.0",
  "description": "",
  "main": "gulpfile.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "appname": "file://gulp",
    "gulp-concat": "^2.6.1",
    "gulp-electron": "^0.1.3",
    "gulp-shell": "^0.5.2",
    "gulp-uglify": "^2.0.0",
    "gulp-util": "^3.0.7",
    "node-7z": "^0.4.0"
  }
}

Certifique-se de que não haja referências estranhas em seu arquivo package.json.

Lanklaas
fonte
1

Verifique se você está executando o npm install no diretório apropriado.

(O arquivo package.json pode ser um diretório extra para baixo, por exemplo.)

James Lawruk
fonte
1

Se o seu problema estiver associado ao empacotador React Native. Tente redefinir o cache com react-native start --reset-cache.

Robô Amigável
fonte
1

No meu caso esqueci de passar o caminho completo de um dos arquivos que ele estava pedindo. Depois de passar o caminho completo do arquivo funcionou :)

Rafael Paz
fonte
1

No meu caso, eu estava enfrentando este problema durante a instalação create-react-appno MAC (Mojave OS)com comando a seguir:

sudo npm install create-react-app -g

e obteve erros como este:

npm WARN tar EISDIR: illegal operation on a directory, open '/usr/local/lib/node_modules/.staging/rxjs-a84420a7/src/scheduler'
npm WARN tar EISDIR: illegal operation on a directory, open '/usr/local/lib/node_modules/.staging/rxjs-a84420a7/src/symbol'
npm WARN tar EISDIR: illegal operation on a directory, open '/usr/local/lib/node_modules/.staging/rxjs-a84420a7/src/testing'
npm WARN tar EISDIR: illegal operation on a directory, open '/usr/local/lib/node_modules/.staging/rxjs-a84420a7/src/util'
npm WARN tar EISDIR: illegal operation on a directory, open '/usr/local/lib/node_modules/.staging/rxjs-a84420a7/src/webSocket'
npm WARN tar EISDIR: illegal operation on a directory, open '/usr/local/lib/node_modules/.staging/rxjs-a84420a7/symbol'
npm WARN tar EISDIR: illegal operation on a directory, open '/usr/local/lib/node_modules/.staging/rxjs-a84420a7/testing'
npm WARN tar EISDIR: illegal operation on a directory, open '/usr/local/lib/node_modules/.staging/rxjs-a84420a7/util'
npm WARN tar EISDIR: illegal operation on a directory, open '/usr/local/lib/node_modules/.staging/rxjs-a84420a7/webSocket'

Eu li o npm.community que tenta instalar sem sudo:

npm install create-react-app -g

e realmente resolveu meu problema .. !!

Ritesh
fonte
1

Certifique-se de que node_modules (e sua raiz package.json) não contém uma referência ao módulo "package.json" do npm. Excluir package.json FOLDER de node_modules resolveu o problema para mim.

Benjamin Piette
fonte
0

Tive um problema semelhante ao configurar o código clichê. Ele estava lendo meu arquivo bundle.js como um diretório. Assim como afirmado aqui. EISDIR significa que é um diretório e não um arquivo. Para corrigir o problema, apaguei o arquivo e apenas recriei (ele foi originalmente criado automaticamente). Se você não conseguir encontrar o arquivo (porque está oculto), basta usar o terminal para localizá-lo e excluí-lo.

Pablo DelaCruz
fonte
0

Tive o mesmo problema até tentar excluir a pasta .git. Funcionou. Acho que esse tipo de problema pode ter diferentes causas.

José Augusto Paiva
fonte
0

Eu tive o mesmo problema. Havia uma pasta vinculada em meu diretório que estava causando o problema. Eu adicionei essa pasta para ignorar a lista e então ela começou a funcionar bem como esperado.

Deyujjal
fonte
0

Eu sei que isso não está perguntando especificamente sobre o forever js .. mas o google me trouxe até aqui .. Para mim foi tão simples quanto uma barra final.

Acabei de mudar:

forever start -a -l /dev/null/ /var/www/node/my_file.js

Para:

forever start -a -l /dev/null /var/www/node/my_file.js

E o erro desapareceu

Marc Alexander
fonte
0

Certifique-se de verificar sua versão do npm e se há ou não problemas com ele. Eu estava tendo o mesmo problema no momento desta postagem e descobri que minha versão do npm (6.5) estava com problemas. Tive que desinstalar e reinstalar o npm versão 6.4.1 e então tudo começou a funcionar bem novamente.

smoosh911
fonte
0

Eu tinha um link simbólico quebrado para node_modules em uma subpasta

Daniel Kukula
fonte
0

No meu caso, essas etapas resolveram meu problema:

  1. npmprocesso de rescisão(CTRL + C)
  2. deletando pasta inteira
  3. criando um novo
  4. correndo de npmnovo
BartusZak
fonte
0

No meu caso, estou usando o Windows 10 em espanhol e esta versão mistura nomes de diretório em inglês e espanhol. Meu problema era que o diretório da área de trabalho tinha esse nome para alguns comandos e escritoriopara outros. Eu acredito que o npm não pode resolver isso. Minha solução foi simplesmente mudar para outro diretório começando em C: \ diferente do meu diretório inicial.

JJEA
fonte
0

Eu havia enfrentado um problema semelhante. Eu defino cafile usando o comando:

npm config set cafile PATH_TO_CERTIFICATE

Consegui resolver isso excluindo as configurações e configurações do arquivo de certificado strict-ssl = false.

Prateek Porwal
fonte
0

Corrigi esse problema movendo meu diretório da minha unidade exFAT que não oferece suporte a links simbólicos.

Minha unidade exFat é compartilhada entre osx e uma partição do windows bootcamp, então quando tentei clonar e instalar o npm meu projeto, ele estava falhando, mas nunca explica que o exFAT não oferece suporte a essa funcionalidade.

Existem drivers por aí que você pode instalar para adicionar a capacidade de link simbólico, mas você terá que fazer muitas configurações manualmente em comparação com a execução de um script npm simples.

Matt
fonte
0

Para mac os: Se instalado diretamente do site do nodejs, o arquivo npmrc estaria localizado em / usr / local / etc / npmrc . Apenas exclua a configuração que está indefinida e o problema será corrigido.

Rajat Gupta
fonte
0

Acabei de remover a linha

.babel('resources/assets/js/app.js')

para laravel 5.6 com vue.js. em webpack.mix.js

Данияр Саумбаев
fonte
0

No meu caso, os C:\Users\{user}\AppData\local\npmarquivos estavam ocultos, então não consegui localizar e excluir o diretório de problemas. Levei dias para perceber isso!

Portanto, verifique novamente para revelar todas as pastas para não perdê-las! Aqui está um link para fazer isso se você não souber como.

Jabarbush
fonte