Як виправити '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.