如何修复 'fs: re-evaluating native module sources is not supported' - graceful-fs

How to fix 'fs: re-evaluating native module sources is not supported' - graceful-fs

最近我切换到 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/issues/902

我尝试做的是通过 n (https://www.npmjs.com/package/n) 降级到 Node v.5 - 它奏效了。然后删除所有 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.

这里的策略是什么:

我遇到了这个问题,我可以通过更新 npm

来解决这个问题
sudo npm update -g npm

更新前,npm info graceful-fs | grep 'version:'的结果是:

version: '3.3.12'

更新后的结果是:

version: '3.9.3'

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

如果你运行宁 nvm 你可能想要 运行 nvm use <desired-node-version> 这使节点与 npm

保持一致

通过重新安装解决了这个错误 gulp

npm uninstall gulp
npm install gulp

正在删除 node_modules 文件夹内容和 运行

npm install bower
npm install

帮我解决了问题!

或尝试更新node:

brew upgrade node

如果它与 brew 一起安装(就像我的情况一样)。 sudo npm update -g npm 没有为我解决 "same" 问题。

如所述,您也可以尝试命令

npm cache clean

在其他步骤没有完全产生结果(除了更新所有内容)之后,这对我来说已经解决了。

只是要指出,cordova 引入了它自己的 npm 和 graceful-fs 依赖项,所以如果您使用 Cordova,请确保它是最新的,这样您也可以从中获得最新的 graceful-fs。

报告说:文件丢失在... vendor/win32-x64-48/binding.node

我查找了 binding.node 文件并在...

中找到了它

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

复制名称为 binding.node 的正确文件,它起作用了。

我能够通过以下方式修复它:

  1. 更新人 package.json
  2. 正在删除 node_modules 文件夹
  3. 正在执行npm install

对于我的 Cordova 项目,卸载和安装 cordova -g 解决了我的问题。

npm uninstall -g cordova
npm install -g cordova