如何修复‘ fs: 不支持重新评估本机模块源代码’-grace-fs

最近我转到了 Node v. 6,它开始在运行普通构建时造成越来越多的问题

例如:

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

而 Gulp 和所有其他插件和模块都安装在/node _ module 文件夹中(甚至通过 rm -rf 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为任意数字

就像在那期我提交的角2种子回购 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

所以现在我被 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.

这里的策略是什么:

  • 手动修补所有包含 grace-fs < 4.0.0的 dep?
  • 有一些全局开关使用特定的软件包版本?
  • 全部重装?
104301 次浏览

我有这个问题,我能够解决这个通过更新 npm

sudo npm update -g npm

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

version: '3.3.12'

更新后的结果是:

version: '3.9.3'

键入 npm list graceful-fs,您将看到当前安装了哪些版本的 grace-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 保持一致

通过重新安装解决了这个问题

npm uninstall gulp
npm install gulp

删除 node _ module 文件夹内容并运行

npm install bower
npm install

帮我解决了问题!

或者尝试更新 node:

brew upgrade node

如果它是与 brew安装(像在我的情况下)。 sudo npm update -g npm没有解决我的“相同”的问题。

给你所述,您还可以尝试执行该命令

npm cache clean

在其他步骤没有完全产生结果(除了更新所有内容之外)之后,这为我解决了问题。

只是要指出的是,Cordova 带来了它自己的 npm 与优雅的-f 依赖,所以如果你使用 Cordova 确保它是最新的,所以你得到最新的优雅的-f 从那以及。

报告显示: 在... 卖主/win32-x64-48/binding.node 中缺少一个文件

我查找 binding.node 文件,发现它在..。

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

复制名为 binding.node 的正确文件,它就可以工作了。

我可以通过:

  1. package.json更新
  2. 删除 node _ module 文件夹
  3. 执行 npm install

在我的 Cordova-project 中,卸载和安装 cordova-g 为我解决了这个问题。

npm uninstall -g cordova
npm install -g cordova