【问题标题】:How to fix 'fs: re-evaluating native module sources is not supported' - graceful-fs如何修复“fs:不支持重新评估本机模块源”-graceful-fs
【发布时间】:2016-09-17 17:00:19
【问题描述】:

最近我切换到 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
  • 有一些全局开关可以使用特定的包版本吗?
  • 重新安装所有东西?

【问题讨论】:

  • 我在使用 Gulp 和我的一些模块时遇到了同样的问题。我通过升级模块以使用最新的优雅 fs 来修复我的模块,但我不确定是否有解决方案来修复尚未升级的其他模块。
  • 看起来这不会在 Gulp 3.x 中修复,您必须升级到 Gulp 4.x github.com/gulpjs/gulp/issues/1571

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


【解决方案1】:

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

sudo npm update -g npm

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

version: '3.3.12'

更新后的结果是:

version: '3.9.3'

【讨论】:

  • 谢谢@Jorge。这有助于解决问题。每次在我的应用程序目录中运行 npm install 时,我仍然会得到 appname@0.1.x /path/of/app 并突出显示优雅的 fs@4.1.4 。但我现在就忍受着。
  • 嗨@Geo,同样在这里,看看analog-nico的答案,我们有同一个包的不同版本,因为其他工具严格依赖于这些版本。要消除警告,我们需要全部升级或寻找替代品。
  • 这对我不起作用,我不得不运行nvm use v6.2.1
  • 请注意 npm info graceful-fs -v 返回 npm 的版本(与运行 npm -v 相同)而不是优雅的 fs。要获得优雅的 fs 版本,请使用 npm info graceful-fs | grep version: 之类的内容。
  • @Asimov 这也对我有用。另外,如果你最近重新安装了 NodeJS(我通过他们网站上的包安装了 Node,然后用自制软件替换了它)在项目主文件夹中运行 rm -rf node_modules && npm install
【解决方案2】:

输入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

【讨论】:

  • 仅供参考,在您的具体示例中,gulp 不会在版本 3 中更改它,而只会在版本 4 中更改:github.com/gulpjs/gulp/issues/1571
  • 这是给我的,最后推动删除 gulp
  • 在我的例子中,pre-v4 graceful-fs 模块依赖来自 npm 本身(版本 3.10.3)通过 cmd-shim@2.0.2。在我使用 npm list -g graceful-fs 列出 global graceful-fs 依赖项之前,我没有看到这一点。
  • 这帮我解决了。我的 graceful-fs 包是最新的,但其他一些包仍然依赖于旧版本。
【解决方案3】:

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

npm uninstall gulp
npm install gulp

【讨论】:

  • 听起来 gulp 已经解决了这个问题 - 不记得我之前是否使用 --save-dev 安装了 gulp,但你的方式在我的项目文件夹中有效。
  • 也为我解决了这个问题
  • 是的,看起来像一个旧的 Gulp 依赖问题。
【解决方案4】:

删除node_modules文件夹内容并运行

npm install bower
npm install

帮我解决了问题!

【讨论】:

    【解决方案5】:

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

    npm cache clean
    

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

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

        我可以通过以下方式修复它:

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

        【讨论】:

          【解决方案8】:

          如果你正在运行 nvm,你可能想运行 nvm use &lt;desired-node-version&gt; 这使 node 与 npm 保持一致

          【讨论】:

            【解决方案9】:

            或者尝试更新node:

            brew upgrade node
            

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

            【讨论】:

              【解决方案10】:

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

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

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

              复制名称为 binding.node 的正确文件即可。

              【讨论】:

                【解决方案11】:

                就我的 Cordova 项目而言,卸载和安装 cordova -g 为我解决了这个问题。

                npm uninstall -g cordova
                npm install -g cordova
                

                【讨论】:

                  猜你喜欢
                  • 2017-04-18
                  • 2017-04-24
                  • 2021-07-15
                  • 2016-05-31
                  • 2019-10-19
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-08-23
                  • 2016-12-17
                  相关资源
                  最近更新 更多