Як виправити '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 repo https://github.com/mgechev/angular2-seed/isissue/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

Тож тепер я справді застряг з витонченими 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.

Яка тут може бути стратегія:

  • Вручну проклейте всі депіси, які містять витончені fs <4.0.0?
  • Є якийсь глобальний перехід на використання конкретної версії пакета?
  • Перевстановити все?

У мене виникають проблеми з Gulp та деякими моїми модулями. Я виправив свої модулі, оновивши модулі до останніх витончених-fs, але я не впевнений, що є рішення, щоб виправити інші модулі, які ще не оновлені.
— Джеремі Чоне

Схоже, це не буде виправлено у Gulp 3.x, і вам доведеться оновити до Gulp 4.x github.com/gulpjs/gulp/isissue/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, тут же, подивіться на відповідь від analog-nico, у нас є різні версії одного пакету, оскільки інші інструменти строго залежать від цих версій. Щоб позбутися попередження, нам потрібно оновити їх або шукати заміни.
— Асімов

5
Для мене це не спрацювало, мені довелося бігатиnvm use v6.2.1
— Ніквенда

46
Зверніть увагу, що npm info graceful-fs -vповертає версію npm (це те саме, що працює npm -v), а НЕ витончено-fs. Щоб отримати витончену версію fs, використовуйте щось подібне npm info graceful-fs | grep version:.
— nstCactus

6
@Asimov Це працювало і для мене. Крім того, якщо ви нещодавно перевстановили NodeJS (я встановив Node через пакет на їхньому веб-сайті, а потім замінив його на домашній), запустіть rm -rf node_modules && npm installу домашній папці проекту.
— Ділантхепігуй

73

Введіть npm list graceful-fsі ви побачите, які версії витончених-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.


13
FYI у вашому конкретному прикладі gulpне змінить його у версії 3, а лише у версії 4: github.com/gulpjs/gulp/isissue/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.
— Расті Шеклфорд

Це допомогло мені вирішити це. Мій витончений пакет-fs був оновлений, але деякі інші пакети все ще покладалися на більш стару версію.
— skerit

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

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


1

Тільки для того, щоб зазначити, що cordova приносить свій власний npm із витонченою залежністю fs, тому якщо ви використовуєте Кордову, переконайтеся, що вона є останньою, тому ви також отримаєте останні витончені fs від цього.


1

Я зміг це виправити:

  1. оновлення за package.json
  2. видалення папки node_modules
  3. виконання npm install

0

якщо ви працюєте з nvm, можливо, ви захочете запустити. nvm use <desired-node-version>Цей режим зберігає узгодженість з npm


0

Або спробуйте оновити node:

brew upgrade node

Якщо він встановлений з brew(як у моєму випадку). sudo npm update -g npmне вирішив для мене "тієї ж" проблеми.


0

У звіті зазначається: у файлі ... vendor / win32-x64-48 /inding.node відсутній файл

Я шукав файлinding.node і знаходжу його у ...

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

Скопіюйте правильний файл з ім'ям зв'язувального вузла і він працює.


0

У разі мого проекту Cordova, видалення та встановлення cordova -g вирішило проблему для мене.

npm uninstall -g cordova
npm install -g cordova
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.