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

she*_*hen 161 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
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

好的,让我们升级或删除并安装新的:

npm i graceful-fs@latest
npm i graceful-fs@4.1.4
sudo npm i graceful-fs@4.1.4 -g
Run Code Online (Sandbox Code Playgroud)

所有结果

npm info graceful-fs -v
3.3.6
Run Code Online (Sandbox Code Playgroud)

所以现在我现在仍然坚持使用优雅的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.
Run Code Online (Sandbox Code Playgroud)

这可能是什么策略:

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

小智 169

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

sudo npm update -g npm
Run Code Online (Sandbox Code Playgroud)

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

version: '3.3.12'
Run Code Online (Sandbox Code Playgroud)

更新后,结果是:

version: '3.9.3'
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`npm info graceful-fs -v`返回npm的版本(它与运行`npm -v`相同)而不是graceful-fs.要获得graceful-fs版本,请使用类似`npm info graceful-fs |的内容 grep版本:`. (46认同)
  • @Asimov这也适合我.此外,如果您最近重新安装了NodeJS(我通过其网站上的软件包安装了Node,然后将其替换为自制软件中的那个),请在项目主文件夹中运行`rm -rf node_modules && npm install`. (6认同)
  • 这并没有为我工作,我还得跑`NVM使用v6.2.1` (5认同)

ana*_*ico 73

键入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
Run Code Online (Sandbox Code Playgroud)

正如你所看到gulp的,内心深处取决于一个非常古老的版本.不幸的是,我无法自己更新npm update graceful-fs.gulp需要更新他们的依赖项.所以,如果你有这样的案例,那你就不走运了.但是你可能会为具有旧依赖性的项目打开一个问题 - 即gulp.

  • 仅供参考,在您的具体示例中,`gulp`不会在版本3中更改它,但仅在版本4中更改:https://github.com/gulpjs/gulp/issues/1571 (13认同)
  • 这对我来说是最后的推动,以消除吞咽 (2认同)

Ham*_*bay 21

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

npm uninstall gulp
npm install gulp
Run Code Online (Sandbox Code Playgroud)