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?

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'

Dzięki @Jorge. Pomogło to rozwiązać problem. Nadal otrzymuję appname@0.1.x / path / of / app z wyróżnionym graceful-fs@4.1.4 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.


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 cmd-shim@2.0.2. 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

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!


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).


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.


1

Udało mi się to naprawić poprzez:

  1. aktualizacja przez package.json
  2. usuwanie folderu node_modules
  3. wykonanie npm install

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


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.



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
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.