尽管 require() 正确返回文件,但 fs.readFileSync 说“没有这样的文件或目录”

Ara*_*dağ 9 javascript json node.js

我需要动态读取 JSON 文件。这就是为什么require()不砍它的原因。在 NodeJS 服务器重新启动之前,它不会简单地更新文件。这就是为什么我必须使用fs.readFileor fs.readFileSync

当我使用时,const data = require("../data.json");它只是正确读取它。完全没有问题,但就像我说的,它不会动态更新。

当我使用const data = () => fs.readFileSync("../data.json", { encoding: "utf8" });它时,它只是返回Error: ENOENT: no such file or directory, open '../data.json'

我也尝试过fs.readFile。不起作用。

最奇怪的是,当我尝试使用 读取另一个 json 文件时fs.readFileSync,我看到了几天前更改的值。它读取的是旧版本。我不明白。那个旧版本已经不存在了。我手动检查过。

我试过npm installnpm cache clean --force。我想不出其他什么了。

aar*_*ins 11

您可能正在寻找require.resolve是否在 Node.js 中使用 CommonJS 模块。这将使用 的内部结构require来提供您要读入的文件的绝对路径字符串。

来源: https: //nodejs.org/api/modules.html#requireresolverequest-options

  • `const data = () => fs.readFileSync(require.resolve("../data.json"), {encoding: "utf8" });` 这解决了问题。谢谢。 (6认同)

Que*_*tin 8

require获取相对于模块文件所在目录的路径。

readFileSync采用相对于当前工作目录的路径。

这些对你来说一定是不同的。

考虑path.resolve与您的相对路径一起使用__dirname