npm błędy instalacji z błędem: ENOENT, chmod


128

Próbuję globalnie zainstalować właśnie opublikowany moduł npm. Za każdym razem, gdy próbuję zainstalować, z npm lub folderu, pojawia się ten błąd.

npm ERR! Error: ENOENT, chmod '/usr/local/lib/node_modules/takeapeek/lib/cmd.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.8.0-19-generic
npm ERR! command "node" "/usr/local/bin/npm" "install" "-g" "takeapeek"
npm ERR! cwd /home/giodamlio
npm ERR! node -v v0.10.6
npm ERR! npm -v 1.3.6
npm ERR! path /usr/local/lib/node_modules/takeapeek/lib/cmd.js
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/giodamlio/npm-debug.log
npm ERR! not ok code 0

Używam sudo i potrójnie sprawdziłem wszystko w pakiecie, wszystko powinno działać. Rozejrzałem się trochę i zobaczyłem kilka podobnych przypadków, z których żaden nie został rozwiązany. Oto, czego próbowałem.

  • Uaktualnij npm ( sudo npm install -g npm)
  • Wyczyść globalną pamięć podręczną npm ( sudo npm cache clear)
  • Wyczyść pamięć podręczną użytkownika npm ( npm cache clear)

Zauważyłem, że błąd miał związek z plikiem, do którego linkuję, a konkretnie gdy npm próbował wykonać chmod. To nie powinno stanowić problemu, mój lib/cli.jsma normalne uprawnienia, a npm ma uprawnienia superużytkownika podczas tej instalacji.

Po przekopaniu się przez dokumentację npm znalazłem opcję, która powstrzymałaby npm od tworzenia linków bin ( --no-bin-links), kiedy próbowałem z nim zainstalować, działało dobrze.

Więc o co chodzi? Czy to jakiś dziwny błąd z marginesami, który nie ma jeszcze rozwiązania?

Edycja: dla odniesienia, oto moduł, który przesłałem


czy twój pakiet używa node-gyp? Myślę, że wywołanie no-bin-links jest powiązane, jeśli tak.
jcollum

Nie, w module nie ma kodu natywnego. Oto źródło modułu w celach informacyjnych.
giodamelio

1
Po --no-bin-linksprostu zatrzymuje npm przed dowiązaniem symbolicznym plików w pliku package.json bindo ścieżki podczas instalacji globalnej.
giodamelio

Argh, na pewno już na to wpadłem, ale nie pamiętam dlaczego ... dam ci znać, jeśli wpadnie mi do głowy.
jcollum

@jcollum Dzięki, to naprawdę frustrujące, sprawdzałem wszystko miliard razy, ale nadal nie mogę oprzeć się wrażeniu, że przegapiłem coś głupiego i prostego. To czy może to jakiś dziwny błąd.
giodamelio

Odpowiedzi:


133

Ok, wygląda na to, że NPM używa twojego .gitignorejako podstawy dla .npmignorepliku i dlatego ignoruje /lib. Jeśli dodasz pusty .npmignoreplik do katalogu głównego aplikacji, wszystko powinno działać.

[edytuj] - więcej informacji na temat tego zachowania tutaj: https://docs.npmjs.com/misc/developers#keeping-files-out-of-your-package


Cholera, to musi być to. Wydaje się, że to trochę zagmatwany sposób robienia rzeczy. Nie przy komputerze teraz, ale spróbuję za kilka godzin.
giodamelio

3
Trzy godziny frustracji sprowadziły się do jednej linii w moim .gitignore, która przestraszyła instalację npm -g. Szalony.
bryan

2
„type NUL> .npmignore” dla systemu Windows
Kabir

1
Począwszy od npm @ 5, pamięć podręczna npm naprawia się samoczynnie z powodu problemów z uszkodzeniem, a dane wyodrębnione z pamięci podręcznej są prawidłowe. Jeśli chcesz się upewnić, że wszystko jest spójne, użyj zamiast tego opcji „npm cache verify”.
Abhijeet

1
usuń plik package-lock.json
FennRussel

107

Napotkałem podobny problem,

npm cache clean

rozwiązałem to.


11
Próbowałem npm cache verifyi zadziałało. dzięki za podpowiedź.
Jaikrat

Począwszy od npm @ 5, pamięć podręczna npm naprawia się samoczynnie z powodu problemów z uszkodzeniem, a dane wyodrębnione z pamięci podręcznej są prawidłowe. Jeśli chcesz się upewnić, że wszystko jest spójne, użyj zamiast tego opcji „npm cache verify”. Z drugiej strony, jeśli debugujesz problem z instalatorem, możesz npm install --cache /tmp/empty-cacheużyć tymczasowej pamięci podręcznej zamiast nukować rzeczywistą.
Daniel ZA

9

Ten problem w jakiś sposób pojawił się u mnie na komputerze Mac, gdy próbowałem uruchomić npm install -g bower. To dawało mi wiele błędów, ponieważ nie mogłem znaleźć rzeczy takich jak pełne wdzięku-fs. Nie jestem pewien, jak pierwotnie zainstalowałem npm, ale wygląda na to, że być może zszedł z węzłem przy użyciu homebrew. Najpierw pobiegłem

brew uninstall node

To usunęło zarówno nodei npmz mojej ścieżki. Stamtąd właśnie ponownie go zainstalowałem

brew install node

Kiedy to się skończyło, miałem nodei npmna swojej drodze i mogłem biec

rm -rf ~/.npm
npm install -g bower

Następnie pomyślnie zainstalowano altankę.

Aktualizowanie formuł naparu i uaktualnianie instalacji wydawało mi się nie działać, nie wiem dlaczego. Usunięcie .npmfolderu było czymś, co zadziałało w przypadku innych osób i próbowałem tego bez powodzenia. Zrobiłem to tym razem na wszelki wypadek. Zauważ również, że żadna z poniższych sytuacji nie rozwiązała problemu u mnie, chociaż w przypadku innych:

npm cache clean
sudo npm cache clean

9

Otrzymałem ten błąd podczas instalacji npm i dodanie .npmignore nie rozwiązało go.

Błąd: ENOENT, stat „C: \ Users \ My-UserName \ AppData \ Roaming \ npm”

Próbowałem przejść do wspomnianego folderu i nie istniał. Błąd został naprawiony po utworzeniu folderu npm w folderze Roaming .

To jest w systemie Windows 8.1


4

Miałem ten sam problem i właśnie znalazłem obsługę nie wymienioną tutaj. Chociaż przyczyniłbym się do społeczności:

npm install -g myappnie kopiował binkatalogu. Okazało się, że tak jest, ponieważ nie uwzględniłem tego filesw moimpackage.json

"files": [
  "lib",
  "bin" // this was missing
]

Mam ten sam problem i ta odpowiedź była dla mnie jedyną dobrą poprawką. Powodem było to, że mam w sobie filesklucz package.jsonz niektórymi wpisami, takimi jak index.jsi LICENSE, ale nie binfolder. Więc działa, jeśli w ogóle nie ma filesklucza lub jeśli jest filesklucz ORAZ binfolder do.
Rémi Becheras

Dzięki, to pomogło mi się uwolnić. Kiedy zauważyłeś, że katalog bin nie został uwzględniony w plikach, pomyślałem „och! Oczywiście!”. Następnie wróciłem do dokumentacji, aby sprawdzić, czy to przegapiłem i nie ma o tym wzmianki (przynajmniej nie w poście na blogu npm, który czytałem). Przynajmniej nie jestem szalony: P. Dzięki za pomoc!
Chris Schmitz,

4

Otrzymałem podobny błąd podczas npm installlokalnej instalacji:

npm ERR! enoent ENOENT: no such file or directory, stat '[path/to/local/installation]/node_modules/grunt-contrib-jst'

Nie jestem pewien, co było przyczyną błędu, ale ostatnio zainstalowałem lokalnie kilka nowych modułów węzłów, zaktualizowałem węzeł za pomocą homebrew i uruchomiłem 'npm update -g'.

Jedynym sposobem rozwiązania tego problemu było całkowite usunięcie lokalnego katalogu node_modules i npm installponowne uruchomienie :

cd [path/to/local/installation]
npm rm -rdf node_modules
npm install

4

W szczególności mam podobny problem: ERR! enoent ENOENT: brak takiego pliku lub katalogu, chmod 'node_modules / npm / node_modules / request / node_modules / http-signature / node_modules / sshpk / bin / sshpk-conv Próbowałem wszystkich powyższych rozwiązań, ale bez powodzenia. Używałem vagrant box, a projekt był w udostępnionym folderze. Problem wydaje się być tylko wtedy, gdy przenoszę projekt do innego nieudostępnionego folderu (z hostem), voila! problem rozwiązany. Na wypadek gdyby inna osoba też używała włóczęgi


Obudziłeś mnie z koszmaru, tnx! Mam 2 dodatki: 1.) Przestań używać npm, użyj Yarn. 2.) Uruchom npm z maszyny HOST, a nie maszyny wirtualnej.
Flip Vernooij

3

Otrzymałem podobny komunikat o błędzie podczas próby npm installkilku zależności. Okazuje się, że niektóre z nich nie instalują się na Debianie / Ubuntu, ponieważ tego oczekują/usr/bin/node się, będą wykonywalne węzłem. Aby to naprawić, musisz to zrobić

sudo ln -s nodejs /usr/bin/node 

Lub jeszcze lepiej,

sudo apt-get install nodejs-legacy

Więcej informacji: https://stackoverflow.com/a/21171188/7581


3

Napotkałem podobne zachowanie po aktualizacji do npm 6.1.0. Wydawało się, że raz to zadziałało, ale potem dostałem się do stanu z tym błędem podczas próby zainstalowania pakietu, który został określony przez ścieżkę w systemie plików:

npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall rename

Następujące rzeczy nie rozwiązały problemu :

  • rm -rf node_modules
  • npm cache clean(dał npm ERR! As of npm@5, the npm cache self-heals.... use 'npm cache verify' instead.)
  • npm cache verify
  • rm -rf ~/.npm

Jak rozwiązałem problem :

  • rm package-lock.json

2

Myślę, że w opublikowanym pakiecie npm brakuje skompilowanego skryptu kawy. Spróbuj napisać polecenie prepublish .


Nie, folder lib był tam, kiedy go opublikowałem. Poza tym otrzymuję ten sam błąd, gdy próbuję zainstalować z folderu lokalnego. Nawet jeśli znajduje się tam folder lib.
giodamelio

1
@giodamelio Zgadzam się z Ryanem w tej sprawie. Błąd mówi, takeapeek/lib/cmd.jsże nie istnieje. Mimo że folder lib może być „tam” podczas publikowania, nie będzie „tam” podczas instalacji przez npm, chyba że jest częścią repozytorium lub jeśli użyjesz prepublish do jego utworzenia.
badsyntax

2

W moim przypadku (wielokrotny kod ENOENT errno 34) problem dotyczył ~/.npm/dostępu do katalogu. Wewnątrz było kilka podkatalogów posiadających root:rootuprawnienia, które powodowały problemy podczas wykonywania poleceń jako zwykły użytkownik (bez sudo). Więc zmieniłem własność wszystkich podkatalogów i plików w katalogu ~/.npm/na mojego lokalnego użytkownika i grupę. To załatwiło sprawę na moim Ubuntu (na Macu też powinno działać).

$ sudo chown yourusername.yourgroupname ~/.npm/ -R

Powinieneś znać swoją nazwę użytkownika, prawda? Jeśli nie, uruchom $ whoamii zastąp nim również nazwę swojej grupy, na przykład:

$ sudo chown johnb.johnb ~/.npm/ -R

EDYTOWAĆ:

Przypadek testowy :

Z mojego konta lokalnego /home/johnbzainstalowałem npm globalnie jakiś generator dla yeoman, na przykład:

$ sudo npm install -g generator-laravel

Charakter problemu :

Powyższe działanie spowodowało zainstalowanie niektórych zależności w ~/.npm/katalogu, posiadających root:rootwłasność (z powodu sudo ...). Najwyraźniej npm nie działa jako użytkownik lokalny (lub później zmienia własność podkatalogów zależnych) podczas ściągania zależności i zapisywania ich w podkatalogu użytkownika lokalnego ~/.npm/. Tak długo, jak npm byłby tak nieostrożny w stosunku do podstawowych problemów związanych z bezpieczeństwem systemu plików unixa, problem będzie się powtarzał.

Rozwiązanie :

  1. Ciągle sprawdzaj, czy ~/.npm/zawiera podkatalogi z własnością (i / lub uprawnieniami) innymi niż twoje lokalne konto użytkownika, zwłaszcza gdy instalujesz lub aktualizujesz coś za pomocą sodo(root). Jeśli tak, zmień własność wewnątrz ~/.npm/na użytkownika lokalnego rekurencyjnie.

  2. Poproś npm, bower, grunt, ...społeczność, aby rozwiązała ten problem, tak jak to opisałem powyżej.


2

Wystąpił ten błąd podczas próby zainstalowania wtyczki gruntowej. stwierdziłem, że mam przestarzałą wersję npm i błąd zniknął po zaktualizowaniu npm do najnowszej wersji

npm install -g npm

1

Próbowałem wszystkich rzeczy, które znalazłem w sieci ( npm cache cleari rm -rf ~/.npm), ale wydaje się, że nic nie działa. Rozwiązaniem problemu była aktualizacja węzła (i npm) do najnowszej wersji. Spróbuj tego.


1

W systemie Windows miałem podobny błąd. Wyszukaj wklej dane aplikacji i wyszukaj ciągnpm .

Zastąpiłem ciąg 'npm'(w tym cudzysłowy) 'npm.cmd'w obu atlasboard\lib\package-dependency-manager.jsi atlasboard\lib\cli\commands.js. To rozwiązało problem.


1

Ten sam błąd podczas globalnej instalacji ( npm install -g mymodule) dla pakietu z nieistniejącym skryptem.

W pliku package.json:

    ...
    "bin": {
      "module": "./bin/module"
    },
    ...

Ale ./bin/modulenie istniał, jak został nazwany modulejs.



1

Możesz otrzymać ten błąd, jeśli twój node.js jest również w jakiś sposób uszkodzony. Naprawiłem ten błąd, całkowicie odinstalowując / restartując / instalując node.js i naprawiłem ten błąd, wraz z trzema innymi tajemniczymi błędami, które są wyświetlane.


1

Uważaj na nieprawidłowe wartości kluczy „directories” i „files” w pliku package.json

Jeśli zaczynasz od nowej aplikacji i chcesz rozpocząć całkowicie pusty, musisz albo rozpocząć od pełnego pustego folderu, albo mieć w nim prawidłowy plik package.json.

Jeśli nie chcesz najpierw tworzyć pliku package.json, po prostu wpisz: npm i some_package

Pakiet o nazwie „some_package” powinien zostać poprawnie zainstalowany w nowym podkatalogu „node_modules”.

Jeśli najpierw utworzysz plik package.json, wpisz: npm init Zachowaj wszystkie wartości domyślne (po prostu klikając ENTER), powinieneś otrzymać prawidłowy plik.

To powinno wyglądać tak:

{
  "name": "yourfoldername",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

Zwróć uwagę, że brakuje następujących kluczy: „ katalogi ”, „ repozytorium ” i „ pliki ”. Wygląda na to, że jeśli użyjesz nieprawidłowych wartości dla „ katalogów ” i / lub „ plików ”, nie będziesz w stanie zainstalować pakietu. Pozostawienie tych kluczy rozwiązało problem za mnie.

Zwróć także uwagę na klucz „ main ”. Ten jest obecny, ale zawiera nieprawidłową wartość. Plik „index.js” nie istnieje (jeszcze). Możesz go bezpiecznie usunąć.

Teraz wpisz: npm i some_package i pakiet o nazwie „some_package” powinien zostać poprawnie zainstalowany w nowym podfolderze „node_modules”.


1

Próbowałem prawie wszystkiego, a potem w końcu to:

Po prostu usuń node_modules, a następnie uruchom 'npm install'ponownie



0

Pojawiał się błąd „Błąd: ENOENT, stat 'C: \ Users \ nazwa_użytkownika \ AppData \ Roaming \ npm'. Ale nie było takiego katalogu. Utworzono katalog i instalacja npm zaczęła działać


0

Niedawno zaktualizowałem do węzła 4.2.1 na komputerze z systemem Windows 7 x64. Podczas biegania

npm install -g bower

Mam podobny błąd:

npm ERR! enoent ENOENT: nie ma takiego pliku lub katalogu, otwórz „C: \ Users \ NAZWA_UŻYTKOWNIKA \ AppData \ Local \ Temp \ npm-THE_HASH”

Myśląc, że jest to związane ze ścieżką AppData, bawiłem się

npm config edit

i

npm config edit --global

aby zmienić pola prefiksu, pamięci podręcznej i tmp, ale otrzymałem ten sam błąd z nowymi ścieżkami:

npm ERR! enoent ENOENT: nie ma takiego pliku lub katalogu, otwórz „C: \ Users \ NAZWA_UŻYTKOWNIKA \ npm-temp \ npm-THE_HASH”

Wszystkie polecenia były uruchamiane jako Administrator, więc miałem pełne uprawnienia.

Potem pomyślałem, że są problemy z istniejącymi plikami, więc uruchomiłem:

npm cache clean

Ale dostałem ten sam błąd. Jednak wciąż było kilka plików tymczasowych. Ręczne usunięcie wszystkich danych tymczasowych za pomocą cygwin w końcu rozwiązało problem:

rm -rf bower bower.cmd node_modules etc

Jeśli masz tylko cmd systemu Windows, możesz użyć czegoś takiego jak

rmdir /S THE_TEMP_DIR

aby usunąć wszystkie podkatalogi (chociaż jeśli masz głęboko zagnieżdżone zależności węzłów, jest to notorycznie problematyczne)

Więc może są jakieś problemy z aktualizacją npm i wiszącymi wersjami bower lub innych pakietów. W moim przypadku wydawało się, że to jest problem


0

Podczas instalacji ionica wyskoczył mi błąd

115648 błąd enoent ENOENT: brak takiego pliku lub katalogu, zmień nazwę 'C: \ Users \ UserName \ AppData \ Roaming \ npm \ node_modules.staging \ ansi-b11f0c4b' -> 'C: \ Users \ UserName \ AppData \ Roaming \ npm \ node_modules \ ionic \ node_modules \ cordova-lib \ node_modules \ ansi '

Nie było żadnego folderu o ansitej ścieżce. Stworzyłem go tam i poprawnie zainstalowałem.


0

Jeśli próbowałeś „dokonać instalacji” w katalogu projektu z tym błędem, możesz spróbować:

rm -rf ./node_modules
npm cache clear
npm remove sails

następnie możesz spróbować „dokonać instalacji”

Jeśli masz "npm ERR! Enoent ENOENT: brak takiego pliku lub katalogu, chmod '... / djam-backend / node_modules / js-beautify / js / bin / css-beautify.js'", możesz spróbować zainstalować niektóre starsze wersje js-beautify, więcej komentarzy: https://github.com/beautify-web/js-beautify/issues/1247

"dependencies": {
  ...
  "js-beautify": "1.6.14"
  ...
}

i uruchom "make install". Wydaje się, że działa w przypadku, gdy nie masz innych zależności, które wymagają wyższej wersji (1.7.0), w tym przypadku musisz obniżyć wersję tych pakietów również w packages.json.

lub


0

Żadne z powyższych nie działało dla mnie. Ale yarn installpracował, a potem npm izaczął działać. Nie wiem, która przędza została naprawiona, ale szybkie i łatwe rozwiązanie!


0

Po pierwsze

 npm rm -rdf node_modules

to zrób

npm install

Następnie zainstaluj wszystkie pliki, które chcesz dodać


0

Wystąpił podobny błąd z npm w kontenerze Dockera dla pakietu webpack. Problem został spowodowany przez argument wiersza poleceń --user polecenia docker run, ponieważ dany użytkownik i grupa tam w jakiś sposób zepsuły uprawnienia na woluminie lokalnym. Mam nadzieję, że to komuś pomoże :)


-3
Creating a new React app in C:\Users\CM\Downloads\react\github-profile.
Installing packages. This might take a couple of minutes.
Installing react, react-dom, and react-scripts...

npm ERR! path C:\Users\CM\AppData\Roaming\npm-cache_cacache\content- 

v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996b1fa335b1
0893d67f7339e4af62bb688c0da2aaca839d4c9d51e2eb015eec65545008a3cad93d00f806

npm ERR! code EPERM
npm ERR! errno -4048
npm ERR! syscall lstat
npm ERR! Error: EPERM: operation not permitted, lstat 
'C:\Users\CM\AppData\Roaming\npm-cache_cacache\content- 
v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996
b1fa335b10893d67f7339e4af62bb688c0da2aaca839d4c9d51e2eb015eec6
5545008a3cad93d00f806'
npm ERR! { [Error: EPERM: operation not permitted, lstat 
'C:\Users\CM\AppData\Roaming\npm-cache_cacache\content- 
v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996b1f 
a335b10893d67f7339e4af62bb688c0da2aaca839d4c9d51e2eb015eec6554500
8a3cad93d00f806']

npm ERR! cause:
npm ERR! { Error: EPERM: operation not permitted, lstat 
'C:\Users\CM\AppData\Roaming\npm-cache_cacache\content- 
v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996b1
fa335b10893d67f7339e4 
af62bb688c0da2aaca839d4c9d51e2eb015eec65545008a3cad93d00f806'
npm ERR! errno: -4048,
npm ERR! code: 'EPERM',
npm ERR! syscall: 'lstat',
npm ERR! path:
npm ERR! 'C:\Users\CM\AppData\Roaming\npm-cache\_cacache\content- 


npm ERR! stack:
npm ERR! 'Error: EPERM: operation not permitted, lstat 
'C:\Users\CM\AppData\Roaming\npm-cache\_cacache\content- 
v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996
b1fa335b10893d67f7339e4af62bb688c0da2aaca839d4c9d51e2eb015
eec65545008a3cad93d00f806'',
npm ERR! errno: -4048,
npm ERR! code: 'EPERM',
npm ERR! syscall: 'lstat',
npm ERR! path:
npm ERR! 'C:\Users\CM\AppData\Roaming\npm-cache\_cacache\content- 
v2\sha512\36\c6\c3e97514319bc1c6d40026e58325e782e1016c996b1fa335
b10893d67f7339e4af62bb688c0da2aaca839d4c9d51e2eb015eec65545008a3cad93
d00f806',
npm ERR! parent: 'postcss-image-set-function' }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It's possible that the file was already in use (by a
text editor or antivirus),
npm ERR! or that you lack permissions to access it.
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double- 
check thenpm 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! C:\Users\CM\AppData\Roaming\npm-cache_logs\2019-03-22T10_
27_19_722Z-debug.log


Aborting installation.
npm install --save --save-exact --loglevel error react react-dom react- 
scripts   has failed.

Deleting generated file... node_modules
Deleting generated file... package.json
Deleting GitHub-profile/ from C:\Users\CM\Downloads\reactDone.``

napotkałem podobny błąd, ale wielokrotnie próbowałem uruchomić polecenie create-react-app i ostatecznie zostało utworzone, to był problem z moim połączeniem internetowym. Sprawdź swoje łącze internetowe


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.