如何修复'fs:不支持重新评估本机模块源' - graceful-fs

时间:2016-05-20 12:15:43

标签: node.js npm node-modules npm-install

最近我转向了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

虽然在/ node_modules文件夹中安装了gulp和所有其他插件和模块(甚至通过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作为任意数字

就像我提交的那个问题一样 - 在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.

这里的策略可能是什么:

  • 手动修补包含graceful-fs的所有deps< 4.0.0?
  • 有一些全局转换使用特定的包版本吗?
  • 重新安装一切?

11 个答案:

答案 0 :(得分:169)

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

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

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

version: '3.3.12'

更新后,结果为:

version: '3.9.3'

答案 1 :(得分:73)

键入npm list graceful-fs,您将看到当前安装了哪些版本的graceful-f。

在我的情况下,我得到了:

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

答案 2 :(得分:21)

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

npm uninstall gulp
npm install gulp

答案 3 :(得分:1)

删除node_modules文件夹内容并运行

npm install bower
npm install

为我解决了这个问题!

答案 4 :(得分:1)

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

npm cache clean

在其他步骤没有完全产生结果(除了更新所有内容之外)之后,我已经修复了它。

答案 5 :(得分:1)

只是要指出cordova带有优雅-ss依赖性的自己的npm,所以如果你使用Cordova确保它是最新的,那么你也可以获得最新的优雅fs。

答案 6 :(得分:1)

我能够解决它:

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

答案 7 :(得分:0)

如果你正在运行nvm,你可能想要运行nvm use <desired-node-version>这使节点与npm保持一致

答案 8 :(得分:0)

或尝试更新node

brew upgrade node

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

答案 9 :(得分:0)

报告说:... vendor / win32-x64-48 / binding.node中缺少一个文件

我查找了binding.node文件,我在...中找到了它。

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

使用名称binding.node复制正确的文件,它可以正常工作。

答案 10 :(得分:0)

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

npm uninstall -g cordova
npm install -g cordova