Jak naprawić błąd „fs: ponowna ocena źródeł modułów natywnych nie jest obsługiwana” - graceful-fs

162

Niedawno przestawiłem się na Node v.6 i zaczęło stwarzać coraz więcej problemów z uruchamianiem normalnych kompilacji grunt / gulp / webpack

Na przykład:

$ gulp
[14:02:20] Local gulp not found in ~/_Other/angular-2-ts/angular2-seed
[14:02:20] Try running: npm install gulp

podczas gdy gulp i wszystkie inne wtyczki i moduły są instalowane (a nawet ponownie instalowane przez rm -rf node_modules) w folderze / node_modules.

Większość z tych błędów ma postać linii

(node:42) fs: re-evaluating native module sources is not supported. 
If you are using the graceful-fs module, 
please update it to a more recent version.

z 42 jako dowolną liczbą

Jak w tym numerze, które przesłałem - w repozytorium angular2-seed https://github.com/mgechev/angular2-seed/issues/902

To, co próbowałem zrobić, to przejść na Node v.5 przez n ( https://www.npmjs.com/package/n ) - zadziałało. Następnie usuń wszystkie node_modulesfoldery, a następnie zrób

npm info graceful-fs -v
3.3.6

ok, zaktualizujmy lub usuń i zainstaluj nowe:

npm i graceful-fs@latest
npm i graceful-fs@4.1.4
sudo npm i graceful-fs@4.1.4 -g

wszystkie wyniki w

npm info graceful-fs -v
3.3.6

Więc teraz utknąłem z graceful-fs 3.3.6 lub nawet gorzej w niektórych zależnościach modułów, takich jak

$ angular2-seed
$ npm install

//other lines..
npm WARN deprecated graceful-fs@1.2.3: graceful-fs v3.0.0 and before 
will fail on node releases >= v7.0. Please update to graceful-fs@^4.0.0 
as soon as possible. Use 'npm ls graceful-fs' to find it in the tree.

Jaka może być tutaj strategia:

  • Czy ręcznie załatać wszystkie deps, które zawierają graceful-fs <4.0.0?
  • Jest jakiś globalny przełącznik do używania określonej wersji pakietu?
  • Zainstalować wszystko ponownie?
shershen
źródło
Mam ten sam problem z Gulpem i niektórymi z moich modułów. Naprawiłem moje moduły, aktualizując je, aby używały najnowszego graceful-fs, ale nie jestem pewien, czy istnieje rozwiązanie do naprawy innych modułów, które nie zostały jeszcze zaktualizowane.
Jeremy Chone
Wygląda na to, że nie zostanie to naprawione w Gulp 3.x i będziesz musiał zaktualizować go do Gulp 4.x github.com/gulpjs/gulp/issues/1571
dtothefp

Odpowiedzi:

170

Miałem ten problem i udało mi się to naprawić, aktualizując npm

sudo npm update -g npm

Przed aktualizacją wynik npm info graceful-fs | grep 'version:'był następujący:

version: '3.3.12'

Po aktualizacji wynik to:

version: '3.9.3'
Asimov
źródło
Dzięki @Jorge. Pomogło to rozwiązać problem. Nadal otrzymuję [email protected] / path / of / app z wyróżnionym [email protected] za każdym razem, gdy uruchamiam npm install w moim katalogu aplikacji. ale na razie z tym żyję.
Geo
Cześć @Geo, to samo tutaj, spójrz na odpowiedź analog-nico, mamy różne wersje tego samego pakietu, ponieważ inne narzędzia zależą ściśle od tych wersji. Aby pozbyć się tego ostrzeżenia, musimy zaktualizować je wszystkie lub poszukać zamienników.
Asimov
5
To nie zadziałało, musiałem biegaćnvm use v6.2.1
Nicwenda
46
Zwróć uwagę, że npm info graceful-fs -vzwraca wersję npm (jest taka sama jak running npm -v), a NIE graceful-fs. Aby uzyskać wersję graceful-fs, użyj czegoś takiego jak npm info graceful-fs | grep version:.
nstCactus
6
@Asimov U mnie też to zadziałało. Ponadto, jeśli niedawno ponownie zainstalowałeś NodeJS (zainstalowałem Node przez pakiet na ich stronie internetowej, a następnie zastąpiłem go pakietem z homebrew), uruchom rm -rf node_modules && npm installw folderze domowym projektu.
Dylanthepiguy
73

Wpisz, npm list graceful-fsa zobaczysz, które wersje graceful-fs są aktualnie zainstalowane.

W moim przypadku dostałem:

npm list graceful-fs

@request/promise-core@0.0.1 /projects/request/promise-core
+-- gulp@3.9.1
| `-- vinyl-fs@0.3.14
|   +-- glob-watcher@0.0.6
|   | `-- gaze@0.5.2
|   |   `-- globule@0.1.0
|   |     `-- glob@3.1.21
|   |       `-- graceful-fs@1.2.3        <==== !!!
|   `-- graceful-fs@3.0.8 
`-- publish-please@2.1.3
  +-- nsp@2.4.0
  | `-- nodesecurity-npm-utils@4.0.1
  |   `-- silent-npm-registry-client@2.0.0
  |     `-- npm-registry-client@7.1.0
  |       `-- graceful-fs@4.1.3 
  `-- read-pkg@1.1.0
    `-- load-json-file@1.1.0
      `-- graceful-fs@4.1.4

Jak widać w gulpgłębi duszy zależy od bardzo starej wersji. Niestety nie mogę zaktualizować tego samodzielnie za pomocą npm update graceful-fs. gulpmusieliby zaktualizować swoje zależności. Więc jeśli masz taki przypadek, nie masz szczęścia. Ale możesz otworzyć problem dla projektu ze starą zależnością - tj gulp.

analog-nico
źródło
13
FYI, w konkretnym przykładzie, gulpnie zmieni go w wersji 3, ale tylko w wersji 4: github.com/gulpjs/gulp/issues/1571
JBE
2
to było to dla mnie, ostatnia próba usunięcia łyka
Darko Z
W moim przypadku graceful-fszależność modułu przed v4 pochodziła z npmsamego siebie (wersja 3.10.3) za pośrednictwem [email protected]. Nie widziałem tego, dopóki nie wymieniłem globalnych graceful-fs zależności za pomocą npm list -g graceful-fs.
Rusty Shackleford
To pomogło mi go rozwiązać. Mój pakiet graceful-fs był aktualny, ale kilka innych pakietów nadal opierało się na starszej wersji.
skerit
21

Rozwiązano ten błąd za pomocą ponownej instalacji gulp

npm uninstall gulp
npm install gulp
Hamza Erbay
źródło
Wygląda na to, że gulp rozwiązał ten problem - nie pamiętałem, czy zainstalowałem go wcześniej z --save-dev, czy nie, ale twój sposób działał z folderu mojego projektu.
wylądował
Naprawiono ten problem również dla mnie
Shady Keshk
Tak, wygląda na starszy problem z uzależnieniem od Gulpa.
serraosays
1

Usuwanie zawartości folderu node_modules i uruchamianie

npm install bower
npm install

rozwiązał problem za mnie!

David
źródło
1

Jak opisano tutaj , możesz również spróbować wykonać polecenie

npm cache clean

To rozwiązało problem, ponieważ pozostałe kroki nie przyniosły w pełni wyników (poza aktualizacją wszystkiego).

serv-inc
źródło
1

Wystarczy zaznaczyć, że cordova wnosi swój własny npm z zależnością graceful-fs, więc jeśli używasz Cordova, upewnij się, że jest najnowszy, aby uzyskać najnowsze graceful-fs.

Yohio
źródło
1

Udało mi się to naprawić poprzez:

  1. aktualizacja przez package.json
  2. usuwanie folderu node_modules
  3. wykonanie npm install
szuuuken
źródło
0

jeśli używasz nvm, możesz chcieć go uruchomić. nvm use <desired-node-version>Dzięki temu węzeł jest spójny z npm

Nicwenda
źródło
0

Lub spróbuj zaktualizować node:

brew upgrade node

Jeśli jest zainstalowany z brew(jak w moim przypadku). sudo npm update -g npmnie rozwiązało dla mnie „tego samego” problemu.

Aziz Alto
źródło
0

Raport mówi: brak pliku w ... vendor / win32-x64-48 / binding.node

Szukałem pliku binding.node i znajduję go w ...

https://github.com/sass/node-sass-binaries

Skopiuj poprawny plik o nazwie binding.node i działa.

David H.
źródło
0

W przypadku mojego projektu Cordova odinstalowanie i zainstalowanie Cordova -g rozwiązało problem za mnie.

npm uninstall -g cordova
npm install -g cordova
Magnus Ingwersen
źródło