如何解决 fs.existsSync 不是一个函数的问题

25

在NodeJS中我有:

const fs = require('fs');
if (!fs.existsSync("some_path")) {
...
}

但是我遇到了这个错误:

TypeError: fs.existsSync 不是一个函数

经过一番搜索,我发现 Webpack 使用自己的 require 来替换 node.jsrequire,所以当你要求一个 node.js 核心模块,而 webpack 无法解析为你的文件或依赖项时,就会抛出该错误。

(我的堆栈跟踪包括 __webpack_require__)

但是我该如何解决呢?


你正在编写用于在浏览器中运行的代码吗?如果是,那么你希望通过文件系统查看它的方式是什么? - Mark
2
@MarkMeyer 不是的,它是NodeJS,所以它将成为一个服务器。 - Gambit2007
8个回答

27

我遇到了与TypeError: fs.existsSync不是一个函数相同的错误。

enter image description here

后来,我发现自动添加了一行代码,导致 import 出现问题。

enter image description here

在从 import 中移除这一行代码之后。

import { TRUE } from "node-sass";

问题已经得到解决。


3
这对我有帮助,谢谢!我的编辑器(Visual Studio Code)不知怎么地神奇地在文件顶部插入了 import { render } from 'node-sass';。-.- - Page not found

7

我遇到了你现在面临的同样的错误。你的vscode可能向你的js文件中添加了一个新模块。移除该模块,你的应用程序就应该正常工作。


4
我正在开发一个Electron应用程序,希望从节点侧发送消息并在React侧获取它。但是,当我从Electron中要求ipcRenderer时,遇到了同样的问题。我尝试了 import { ipcRenderer } from 'electron';const { ipcRenderer } = require('electron') 由于Webpack将Node的require转换为其自己的webpack_require导致错误。请查看更多信息此处 对我有用的方法是使用 const { ipcRenderer } = window.require('electron'); 在React侧/ Electron的renderer侧。

“TypeError: fs.existsSync is not a function” ReactJS 和 Electron 是关于 Electron 问题的更好的讨论串。 - ggorlen
当使用window.require时,出现错误:服务器错误 ReferenceError: window is not defined - qg_java_17137
使用window.require时出现错误:服务器错误,引用错误:未定义window - undefined

4

您可以通过在配置中将目标设置为node,允许webpack使用Node的require并包括fs等模块:

module.exports = {
  entry: './src/main.js',
  target: 'node',
  output: {
    path: path.join(__dirname, 'build'),
    filename: 'backend.js'
  }
}

根据这里描述的内容:https://webpack.js.org/concepts/targets/https://webpack.js.org/configuration/target/,Webpack支持将应用程序打包为特定环境(称为目标)。目标可以是浏览器、Node.js等。在配置文件中,target属性用于指定目标环境。

这是你的Webpack配置文件:https://webpack.js.org/configuration/(在根文件夹中添加`webpack.config.js`)。 - Mark
我正在使用使用create-react-app创建的模板(我想是这样),所以现在我有3个webpack.config.js文件: ...node_modules/react-scripts/config/webpack.config.dev.js ...node_modules/react-scripts/config/webpack.config.prod.js ...node_modules/raphael/webpack.config.dev.js我需要使用其中一个还是创建一个新的? - Gambit2007
@Gambit2007 对于配置react不太确定,抱歉。 - Mark

2
在我的情况下,我忘记了我只导入了 promises API,即 const fs = require("fs").promises,在 Node 17.4.0 中没有 existexistsSync 函数。
要使用 existexistsSync,请确保您使用同步 API 导入了 fsconst fs = require("fs"))。
注:我将此答案添加为错误的规范线程的可能解决方案,而不是 OP,后者似乎已经正确地要求了 fs

1
这没什么可担心的,检查一下你的代码是否有类似于import { types } from "node-sass";的内容,可能是误导性的自动导入。删除该行代码后,一切应该正常工作。
即使不是type,也可能是来自node-sass的某些内容,你无法编辑node_modules文件。因此,请查找并删除import { types } from "node-sass"

0
在我的情况下,VSCode添加了一个来自electron的任意导入。删除后,我的应用程序就可以工作了。
import { Menu } from 'electron';

-1
在我的情况下,我需要从节点发送消息到React。我尝试从'electron'导入ipcRenderer;和const ipceRenderer = require('electron')。这会导致错误,因为webpack将节点的require更改为自己的webpack require。更多信息请参见此处

目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接