未捕获的类型错误:fs.writeFile不是函数



我的程序中出现错误Uncaught TypeError: fs.writeFile is not a function,我只想在其中向JSON文件中写入一些内容。fs.readFileSync函数可以正常工作,但fs.writeFile由于某些原因不能正常工作。这是我的代码:

HTML:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<h1>Hello World!</h1>
<button id="button">Write Something</button>
<script src="./app.js"></script>
</body>
</html>

JavaScript:

const fs = require("fs");
const data = fs.readFileSync("db.json", "utf8");
const db = JSON.parse(data);
console.log(db);
document.getElementById("button").onclick = () => {
fs.writeFile("db.json", "test", () => {
console.log("Written file!");
});
};

JSON:

["something1", "something2"]

只是想让你知道,我正在使用Parcel作为我的打包器。请帮我解释为什么这不起作用。

Node.jsfs模块不是用JavaScript编写的。它是用C/C++编写的Node.js的核心部分。它不会在web浏览器中运行,也不能绑定到JS文件中。

(注意,readFileSync可以内联,它只是在捆绑文件时读取文件,而不是在运行时读取(。

如果你想生成一个JSON文件,那么你可以:

  • 编写一个web服务(将JSON写入服务器上的文件(,然后向其发出HTTP请求
  • 将数据转换为可下载的URL(以便将其保存到用户的下载文件夹中(

即使使用bundler,也无法在浏览器中使用writeFile,因为这是Node.js,而不是浏览器API。Bundlers不会在浏览器的构建中嵌入本机Node.js函数,因为这是两种不同的执行环境。

在浏览器中,未经用户同意,您不能任意触发在磁盘上写入文件,因此您必须实际触发文件下载

我也面临同样的问题。

const fs = require('fs-extra');替换const fs = require("fs");

这对我很有效。
fs-extra在核心fs模块的基础上提供了额外的功能,使其成为许多用例的一个更方便的选项。

如果这对其他人有效,请告诉我。

最新更新