Как исправить 'fs: переоценка исходных модулей не поддерживается' - graceful-fs

162

Недавно я переключился на Node v.6, и он начал создавать все больше и больше проблем при запуске обычных сборок grunt / gulp / webpack

Например:

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

в то время как gulp и все остальные плагины и модули установлены (и даже переустановлены через rm -rf node_modules) в папке / node_modules.

Большинство из этих ошибок имеют вид строки

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

с 42 в качестве произвольного числа

Как и в этом выпуске, который я представил - в репозитории angular2-seed https://github.com/mgechev/angular2-seed/issues/902

То, что я пытался сделать, это перейти на Node v.5 через n ( https://www.npmjs.com/package/n ) - это сработало. Затем удалите все node_modulesпапки, затем выполните

npm info graceful-fs -v
3.3.6

Хорошо, давайте обновим или удалим и установим новое:

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

все результаты в

npm info graceful-fs -v
3.3.6

Так что теперь я застрял с graceful-fs 3.3.6 или даже хуже в некоторых зависимостях модулей, таких как

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

Какой может быть стратегия здесь:

  • Вручную исправьте все deps, которые содержат graceful-fs <4.0.0?
  • Есть какой-то глобальный переключатель для использования конкретной версии пакета?
  • Переустановить все?
Шершень
источник
У меня та же проблема с Gulp и некоторыми моими модулями. Я исправил свои модули, обновив модули для использования последних версий graceful-fs, но я не уверен, что существует решение для исправления других модулей, которые еще не были обновлены.
Джереми Чон
Похоже, что это не будет исправлено в Gulp 3.x, и вам придется перейти на Gulp 4.x github.com/gulpjs/gulp/issues/1571
dtothefp

Ответы:

170

У меня была эта проблема, и я смог это исправить, обновив npm

sudo npm update -g npm

До обновления результат npm info graceful-fs | grep 'version:'был:

version: '3.3.12'

После обновления результат:

version: '3.9.3'
Азимов
источник
Спасибо @Jorge. Это помогло решить проблему. Я все еще получаю appname@0.1.x / path / of / app с выделенным graceful-fs@4.1.4 каждый раз, когда я запускаю npm install в своем каталоге приложения. но я живу с этим сейчас.
Geo
Привет @Geo, то же самое, посмотри на ответ аналога-nico, у нас разные версии одного и того же пакета, потому что другие инструменты строго зависят от этих версий. Чтобы избавиться от предупреждения, нам нужно обновить их все или искать замены.
Азимов
5
Это не сработало для меня, я должен был бежатьnvm use v6.2.1
Nicwenda
46
Обратите внимание, что npm info graceful-fs -vвозвращает версию npm (она совпадает с запущенной npm -v) и НЕ graceful-fs. Чтобы получить версию graceful-fs, используйте что-то вроде npm info graceful-fs | grep version:.
nstCactus
6
@Asimov У меня это тоже сработало. Кроме того, если вы недавно переустановили NodeJS (я установил Node через пакет на их веб-сайте, а затем заменил его на пакет homebrew), запустите его rm -rf node_modules && npm installв домашней папке проекта.
Dylanthepiguy
73

Введите, npm list graceful-fsи вы увидите, какие версии graceful-fs в настоящее время установлены.

В моем случае я получил:

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

Как видите, в gulpглубине души зависит от очень старой версии. К сожалению, я не могу обновить это самостоятельно npm update graceful-fs. gulpнужно будет обновить свои зависимости. Так что если у вас есть такой случай, вам не повезло. Но вы можете открыть вопрос для проекта со старой зависимостью - то есть gulp.

аналого-Nico
источник
13
К вашему сведению, в вашем конкретном примере gulpэто не изменится в версии 3, но только в версии 4: github.com/gulpjs/gulp/issues/1571
JBE
2
это было для меня, последний толчок, чтобы удалить глоток
Darko Z
В моем случае graceful-fsзависимость от модуля pre-v4 исходила npmсама по себе (версия 3.10.3) через cmd-shim@2.0.2. Я не видел этого, пока не перечислил глобальные graceful-fs зависимости, используя npm list -g graceful-fs.
Расти Шеклфорд
Это помогло мне решить это. Мой пакет graceful-fs был современным, но несколько других пакетов все еще полагались на более старую версию.
скерит
21

Решил эту ошибку с помощью переустановки gulp

npm uninstall gulp
npm install gulp
Хамза Эрбай
источник
Похоже, gulp исправил эту проблему - не мог вспомнить, установил ли я gulp с --save-dev или нет, но ваш путь работал из папки моего проекта.
приземлился
Исправлена ​​проблема и для меня
Shady Keshk
Да, похоже на старую проблему зависимости от Gulp.
serraosays
1

Удаление содержимого папки node_modules и запуск

npm install bower
npm install

решил проблему для меня!

Дэвид
источник
1

Как описано здесь , вы также можете попробовать команду

npm cache clean

Это исправило это для меня, после того, как другие шаги не дали полностью результатов (кроме обновления всего).

Serv-вкл
источник
1

Просто чтобы указать, что cordova вводит свой собственный npm с зависимостью graceful-fs, поэтому, если вы используете Cordova, убедитесь, что он самый последний, поэтому вы также получите последние graceful-fs.

Yohio
источник
1

Я смог это исправить:

  1. обновление по package.json
  2. удаление папки node_modules
  3. проведение npm install
szuuuken
источник
0

если вы работаете NVM вы можете запустить nvm use <desired-node-version>Это держит узел в соответствии с НПМ

Nicwenda
источник
0

Или попробуйте обновить node:

brew upgrade node

Если он установлен с brew(как в моем случае). sudo npm update -g npmне решил «ту же» проблему для меня.

Азиз Альто
источник
0

В отчете говорится: файл отсутствует в ... vendor / win32-x64-48 / binding.node

Я искал файл binding.node и нашел его в ...

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

Скопируйте правильный файл с именем binding.node, и он работает.

Дэвид Х
источник
0

В случае моего Cordova-проекта удаление и установка cordova -g устранили проблему для меня.

npm uninstall -g cordova
npm install -g cordova
Магнус Ингверсен
источник