Comment réparer 'fs: la réévaluation des sources de module natif n'est pas prise en charge' - Graceful-fs


162

Récemment, j'ai basculé vers Node v.6, et cela a commencé à créer de plus en plus de problèmes avec l'exécution de builds normaux grunt / gulp / webpack

Par exemple:

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

tandis que gulp et tous les autres plugins et modules sont installés (et même réinstallés via rm -rf node_modules) dans le dossier / node_modules.

La plupart de ces erreurs ont une ligne comme

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

avec 42 comme nombre arbitraire

Comme dans ce numéro que j'ai soumis - dans le repo angular2-seed https://github.com/mgechev/angular2-seed/issues/902

Ce que j'ai essayé de faire est de revenir à Node v.5 via n ( https://www.npmjs.com/package/n ) - cela a fonctionné. Supprimez ensuite tous les node_modulesdossiers, puis faites

npm info graceful-fs -v
3.3.6

ok, permet de mettre à jour ou de supprimer et d'installer de nouveaux:

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

tous les résultats en

npm info graceful-fs -v
3.3.6

Alors maintenant, je suis actuellement coincé avec graceful-fs 3.3.6 ou même pire dans certaines dépendances de modules, comme

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

Quelle pourrait être la stratégie ici:

  • Corrigez manuellement tous les deps qui contiennent graceful-fs <4.0.0?
  • Il y a un commutateur global pour utiliser une version de package spécifique?
  • Tout réinstaller?

J'ai le même problème avec Gulp et certains de mes modules. J'ai corrigé mes modules en mettant à niveau les modules pour utiliser le dernier graceful-fs, mais je ne suis pas sûr qu'il existe une solution pour réparer d'autres modules qui n'ont pas encore été mis à niveau.
Jeremy Chone

On dirait que cela ne sera pas corrigé dans Gulp 3.x et vous devrez passer à Gulp 4.x github.com/gulpjs/gulp/issues/1571
dtothefp

Réponses:


170

J'ai eu ce problème et j'ai pu résoudre ce problème en mettant à jour npm

sudo npm update -g npm

Avant la mise à jour, le résultat de npm info graceful-fs | grep 'version:'était:

version: '3.3.12'

Après la mise à jour, le résultat est:

version: '3.9.3'

Merci @Jorge. Cela a aidé à résoudre le problème. Je reçois toujours appname@0.1.x / path / of / app avec graceful-fs@4.1.4 en surbrillance chaque fois que j'exécute npm install dans mon répertoire d'applications. mais je vis avec ça pour le moment.
Geo

Salut @Geo, pareil ici, regardez la réponse par analog-nico, nous avons différentes versions du même package car d'autres outils dépendent strictement de ces versions. Pour se débarrasser de l'avertissement, nous devons tous les mettre à niveau ou chercher des remplaçants.
Asimov

5
Cela n'a pas fonctionné pour moi, je devais courirnvm use v6.2.1
Nicwenda

46
Veuillez noter que npm info graceful-fs -vrenvoie la version de npm (c'est la même chose que l'exécution npm -v) et PAS graceful-fs. Pour obtenir la version gracieuse-fs, utilisez quelque chose comme npm info graceful-fs | grep version:.
nstCactus

6
@Asimov Cela a fonctionné pour moi aussi. De plus, si vous avez réinstallé NodeJS récemment (j'ai installé Node via le package sur leur site Web, puis je l'ai remplacé par celui de homebrew), exécutez-le rm -rf node_modules && npm installdans le dossier d'accueil du projet.
Dylanthepiguy

73

Tapez npm list graceful-fset vous verrez quelles versions de graceful-fs sont actuellement installées.

Dans mon cas, j'ai:

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

Comme vous pouvez le voir au gulpfond, cela dépend d'une très ancienne version. Malheureusement, je ne peux pas mettre à jour cela moi-même en utilisant npm update graceful-fs. gulpauraient besoin de mettre à jour leurs dépendances. Donc, si vous avez un cas comme celui-ci, vous n'avez pas de chance. Mais vous pouvez ouvrir un problème pour le projet avec l'ancienne dépendance - ie gulp.


13
FYI, dans votre exemple spécifique, gulpne le changera pas dans la version 3 mais seulement dans la version 4: github.com/gulpjs/gulp/issues/1571
JBE

2
c'était tout pour moi, dernière poussée pour supprimer gulp
Darko Z

Dans mon cas, la graceful-fsdépendance du module pré-v4 venait de npmlui-même (version 3.10.3) via cmd-shim@2.0.2. Je n'ai pas vu cela jusqu'à ce que j'énumère les dépendances globales graceful-fs utilisant npm list -g graceful-fs.
Rusty Shackleford

Cela m'a aidé à le résoudre. Mon paquet graceful-fs était à jour, mais quelques autres paquets reposaient encore sur une version plus ancienne.
skerit

21

Résolu ce bogue avec réinstaller gulp

npm uninstall gulp
npm install gulp

On dirait que gulp a résolu ce problème - je ne me souviens pas si j'ai installé gulp avec --save-dev ou pas avant, mais votre chemin a fonctionné à partir de mon dossier de projet.
atterri

Correction du problème pour moi aussi
Shady Keshk

Ouais, ça ressemble à un ancien problème de dépendance de Gulp.
serraosays

1

Suppression du contenu du dossier node_modules et exécution

npm install bower
npm install

résolu le problème pour moi!


1

Comme décrit ici , vous pouvez également essayer la commande

npm cache clean

Cela a résolu le problème pour moi, après que les autres étapes n'aient pas donné de résultats complets (à part la mise à jour de tout).


1

Juste pour souligner que cordova apporte son propre npm avec la dépendance gracieux-fs, donc si vous utilisez Cordova, assurez-vous qu'il est le plus récent afin d'obtenir également les derniers gracieux-fs.


1

J'ai pu résoudre ce problème en:

  1. mise à jour par package.json
  2. suppression du dossier node_modules
  3. exécution npm install

0

si vous exécutez nvm, vous voudrez peut-être exécuter nvm use <desired-node-version>Cela maintient le nœud cohérent avec npm


0

Ou essayez de mettre à jour node:

brew upgrade node

S'il est installé avec brew(comme dans mon cas). sudo npm update -g npmn'a pas résolu le «même» problème pour moi.


0

Le rapport dit: un fichier est manquant dans ... vendor / win32-x64-48 / binding.node

J'ai cherché le fichier binding.node et je le trouve dans ...

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

Copiez le fichier correct avec le nom binding.node et cela fonctionne.


0

Dans le cas de mon projet Cordova, la désinstallation et l'installation de cordova -g ont résolu le problème pour moi.

npm uninstall -g cordova
npm install -g cordova
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.