NPM utknął, dając ten sam błąd EISDIR: Niedozwolona operacja na katalogu, odczyt przy błędzie (natywny)

102

Utknąłem z tym błędem bez względu na katalog, w którym się znajduję i co wpiszę po „npm” w cmd.exe. Oto plik 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 ]

Wielokrotnie próbowałem odinstalować / ponownie zainstalować nodejs, usunąłem nawet foldery npm i npm-cache w C: \ Users \ me \ AppData \ Roaming. Nie jestem pewien, co poszło nie tak, aby to spowodować. Sekundę działało dobrze, a teraz nie mogę pozbyć się tego błędu. Wyjaśnienie w dzienniku nie ma sensu, ponieważ podaje ten błąd w dowolnym katalogu. Powinienem zauważyć, że uruchomienie wiersza poleceń jako administrator nie powoduje tego błędu. Wyrywam włosy w ten piątek wieczorem, próbując to naprawić, każda pomoc byłaby bardzo mile widziana!

InnyMike
źródło
1
Uważam, że ten błąd jest powszechny, gdy ludzie aktualizują npm, zastanawiam się, czy ten błąd zaczął się po zaktualizowaniu npm, czy w ogóle go zaktualizowałeś?
Clavin
To nowy komputer, więc w ciągu ostatnich kilku dni zainstalowałem node. Właśnie zrobiłem aktualizację w trybie administratora, ale bez szczęścia
AnotherMike

Odpowiedzi:

61

Napotkałem ten sam problem podczas zmiany niektórych ustawień npm. Popełniłem błąd z jednym npm config setpoleceniem i dodałem linię odnoszącą się do nieistniejącego katalogu do C:\Users\{User}\.npmrc. Po ręcznym usunięciu tej linii z .npmrcprogramu problem zniknął.

user1460043
źródło
1
Jak idiota ze mnie? Byłem w podfolderze ahahahah, dzięki.
Sampgun
Ja też wskazywałem cafile do folderu zamiast rzeczywistego pliku i każde npmpolecenie przestało działać całkowicie, żadne rozwiązanie nie działało poza Twoją odpowiedzią, dzięki!
Giorgio Tempesta
195

EISDIR oznacza „ Error, Is Directory ”. Oznacza to, że NPM próbuje coś zrobić z plikiem, ale jest to katalog . W twoim przypadku NPM próbuje " odczytać " plik będący katalogiem (linia: 4). Ponieważ operacji nie można wykonać, zgłaszany jest błąd.

Trzy rzeczy, których należy się upewnić.

  1. Upewnij się, że plik istnieje. Jeśli tak nie jest, musisz go utworzyć. (Jeśli NPM zależy od jakichś konkretnych informacji w pliku, będziesz potrzebować tam tych informacji).
  2. Upewnij się, że jest to plik, a nie katalog.
  3. Ma odpowiednie uprawnienia. Możesz zmienić plik tak, aby miał wszystkie uprawnienia za pomocą „sudo chmod 777 FILE_NAME”. (Uwaga: każdemu w tym pliku udzielasz uprawnień do odczytu, zapisu i wykonywania)
MauricioLeal
źródło
13
Powinna to być akceptowana odpowiedź imo, ponieważ zawiera informacje o problemie, a także rozwiązanie
schu34
4
Jak idiota ze mnie? Byłem w podfolderze ahahahah, dzięki.
Sampgun
4
Spędziłem nad tym 3 godziny. Miałem folder o nazwie back-button.css. 3 godziny nigdy nie wrócę. Dzięki tobie nie było to 4.
Loke
1
Otrzymałem to za pomocą fs.writeFile - ale błąd zatrzymał mój program przed przekazaniem nazwy pliku, więc próbował pisać w folderze. Dzięki.
Nelles,
1
To jest poprawne. Napotkałem ten problem podczas korzystania z Nodemailer w programie aplikacji komputerowej NW.js podczas pisania kodu dla menedżera poczty e-mail. Próbowałem też czytać katalog zamiast czytać plik obrazu do wysłania jako załącznik. Dziękuję Ci bardzo.
hygull
13

Miałem ten sam problem dzisiaj po uaktualnieniu mojego npm z wersji 6.4.1 do wersji 6.5.0. Naprawiłem to, pobierając instalator .pkg (zalecany dla większości użytkowników) z node.js i później go uruchomiłem .

PeeJee
źródło
Dokładnie ta sama metoda pomogła mi
DNReNTi
moja maszyna nie ta sama wersja npm zainstalowany, ale nadal jestem w obliczu problemu
Gaurav Paliwal
9

W moim przypadku otrzymałem komunikat „EISDIR: nielegalna operacja na katalogu, przeczytaj”, ponieważ w moim pliku .angular-cli.json nie podano pełnej ścieżki w „skryptach:”

Na przykład miałem

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

Właściwie to powinno

"scripts": [
        "../node_modules/hammerjs/hammer.min.js",
        "../node_modules/moment/min/moment.min.js"
      ],
Obrabować
źródło
7

Miałem ten sam problem na Mac OS X (instalowanym z homebrew), a .npmrc nie jest jedynym miejscem, w którym przechowywane są zmienne konfiguracyjne węzła. W / usr / local / etc znajduje się plik konfiguracyjny glocal npmrc, który musisz edytować za pomocą tego polecenia:

sudo nano npmrc

Usuń ca=linię lub jakiekolwiek ustawienie konfiguracyjne, które zepsuło twoją instalację, zapisz ten plik i spróbuj ponownie npm, a powinieneś zobaczyć, jak działa.

rncrtr
źródło
Cieszę się, że mogłem pomóc.
rncrtr
4

Te dziwne błędy wystąpiły ostatnio na moim komputerze z OSX.

Mogę sobie pomóc w szybki i brudny sposób, biegając:

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

Wydawało się, że coś zepsuło prawa dostępu do wszystkich globalnych modułów węzłów.

datayeah
źródło
2

U mnie poprawka polegała na dodaniu ukośnika po nazwie katalogu

Miniwe
źródło
1

Wykonanie całkowitego odinstalowania, w tym usunięcia ścieżek itp., I ponowna instalacja rozwiązało problem, ale bardzo dziwny problem.

Jak całkowicie usunąć node.js z systemu Windows

InnyMike
źródło
Przede wszystkim nie podobała mi się twoja odpowiedź, ale muszę przyznać, że to samo spotkało mnie. Utworzenie nowego meteorprojektu --reactspowodowało ten problem, ale usunięcie projektu i ponowne utworzenie go działało (OS X).
Hola Soy Edu Feliz Navidad
1

Miałem ten problem z łykiem. Problem polegał na tym, że gulp dodał zależność do mojego pliku źródłowego i myślę, że npm próbował go otworzyć:

{
  "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"
  }
}

Upewnij się, że w pliku package.json nie ma dziwnych odniesień.

Lanklaas
źródło
1

Sprawdź, czy uruchamiasz instalację npm z właściwego katalogu.

(Na przykład plik package.json może znajdować się o jeden dodatkowy katalog w dół).

James Lawruk
źródło
1

Jeśli twój problem jest związany z pakietem React Native. Spróbuj zresetować pamięć podręczną za pomocą react-native start --reset-cache.

Przyjazny robot
źródło
1

W moim przypadku zapomniałem podać pełną ścieżkę do jednego z żądanych plików. Po przejściu pełnej ścieżki do pliku zadziałało :)

Rafael Paz
źródło
1

W moim przypadku napotkałem ten problem podczas instalacji create-react-appza MAC (Mojave OS)pomocą następującego polecenia:

sudo npm install create-react-app -g

i otrzymałem takie błędy:

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'

Przeczytałem npm.community, które próbują zainstalować bez sudo:

npm install create-react-app -g

i faktycznie rozwiązało mój problem .. !!

Ritesh
źródło
1

Upewnij się, że node_modules (i twój root package.json) nie zawierają odniesienia do modułu npm "package.json". Usunięcie FOLDERa package.json z node_modules rozwiązało problem.

Benjamin Piette
źródło
0

Miałem podobny problem podczas konfigurowania kodu standardowego. Czytał mój plik bundle.js jako katalog. Tak jak podano tutaj. EISDIR oznacza katalog, a nie plik. Aby rozwiązać problem, usunąłem plik i po prostu go odtworzyłem (pierwotnie został utworzony automatycznie). Jeśli nie możesz znaleźć pliku (ponieważ jest ukryty), po prostu użyj terminala, aby go znaleźć i usunąć.

Pablo DelaCruz
źródło
0

Miałem ten sam problem, dopóki nie spróbowałem usunąć folderu .git. Zadziałało. Myślę, że ten typ problemu może mieć różne przyczyny.

José Augusto Paiva
źródło
0

Miałem ten sam problem. W moim katalogu znajdował się połączony folder, który powodował problem. dodałem ten folder, aby ignorować listę, a następnie zaczął działać dobrze, zgodnie z oczekiwaniami.

deyujjal
źródło
0

Wiem, że to nie jest konkretnie pytanie o wieczne js ... ale Google mnie tu prowadzi, więc ... Dla mnie to było tak proste jak kończący ukośnik.

Właśnie zmieniłem:

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

Do:

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

I błąd zniknął

Marc Alexander
źródło
0

Upewnij się, że sprawdziłeś swoją wersję npm i czy występują z nią problemy. Miałem ten sam problem w czasie pisania tego posta i odkryłem, że moja wersja npm (6.5) ma problemy. Musiałem odinstalować i ponownie zainstalować npm w wersji 6.4.1 i wtedy wszystko zaczęło znowu działać świetnie.

smoosh911
źródło
0

Miałem zepsute dowiązanie symboliczne do node_modules w podfolderze

Daniel Kukula
źródło
0

W moim przypadku te kroki rozwiązały mój problem:

  1. kończenie npmprocesu(CTRL + C)
  2. usuwanie całego folderu
  3. tworzenie nowego
  4. npmznowu działa
BartusZak
źródło
0

W moim przypadku używam systemu Windows 10 w języku hiszpańskim, a ta wersja zawiera angielskie i hiszpańskie nazwy katalogów. Mój problem polegał na tym, że katalog pulpitu ma tę nazwę dla niektórych poleceń i escritoriodla innych. Uważam, że npm nie może tego rozwiązać. Moim rozwiązaniem było po prostu przejście do innego katalogu zaczynającego się od C: \ innego niż mój katalog domowy.

JJEA
źródło
0

Miałem podobny problem. Ustawiam cafile poleceniem:

npm config set cafile PATH_TO_CERTIFICATE

Udało mi się rozwiązać ten problem, usuwając ustawienia pliku certyfikatu i ustawienie strict-ssl = false.

Prateek Porwal
źródło
0

Rozwiązałem ten problem, przenosząc katalog z dysku exFAT, który nie obsługuje dowiązań symbolicznych.

Mój dysk exFat jest współdzielony między osx i partycją systemu Windows bootcamp, więc kiedy próbowałem sklonować i zainstalować projekt npm, kończyło się to niepowodzeniem, ale nigdy nie wyjaśnia, że ​​exFAT nie obsługuje tej funkcji.

Istnieją sterowniki, które możesz zainstalować, aby dodać możliwość dowiązania symbolicznego, ale będziesz musiał wykonać wiele konfiguracji ręcznie w porównaniu do uruchomienia prostego skryptu npm.

Matt
źródło
0

W przypadku systemu Mac OS: Jeśli zostanie zainstalowany bezpośrednio ze strony nodejs, plik npmrc będzie znajdować się w / usr / local / etc / npmrc . Po prostu usuń konfigurację, która jest niezdefiniowana, a problem zostanie rozwiązany.

Rajat Gupta
źródło
0

Właśnie usunąłem linię

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

dla laravel 5.6 z vue.js. w webpack.mix.js

Данияр Саумбаев
źródło
0

W moim przypadku C:\Users\{user}\AppData\local\npmpliki były ukryte, więc nie mogłem znaleźć i usunąć katalogu problemów. Zrozumienie tego zajęło mi DNI!

Więc sprawdź dokładnie, aby odkryć wszystkie foldery, aby ich nie przegapić! Oto link do zrobienia tego, jeśli nie wiesz jak.

jabarbush
źródło