node.js - fs.writeFile() 和 fs.readFile() 奇怪的行为

标签 node.js reactjs electron

我正在使用 Electron 和 React 编写桌面应用程序。我想将一些信息存储在 JSON 文件中。我试过 web-fs 和 browserify-fs 来完成这个,但都没有按预期工作。我的设置如下

项目/应用程序/( react 文件)

项目/index.html

项目/js/bundle.js

项目/main.js

我正在使用 watchify 将 react 文件中的所有更改编译到 bundle.js 文件(由 index.html 读取)。

以下是从 project/app/中的 app.js 运行的(这也是存储 JSON 文件的地方)

import * as fs from 'browserify-fs';
...
fs.writeFile('./fileData.json', data, function(err){
    if(err)console.log(err);
    else console.log("success");
   });

“成功”始终记录到控制台,但是无论我如何指定路径,文件的内容都不会更新。

我试过'./fileData.json'

'/fileData.json'

__dirname + '/fileData.json'(告诉我找不到 __dirname)

(fileData.json 的绝对路径)(告诉我找不到/Users)

完成上述操作后,如果我将 writeFile 更改为 readFile 并将内容记录到控制台,则会打印更新的文件。即使我删除了 fileData.json 文件,该文件也已成功读取。

这让我相信 fs.writeFile() 正在写入另一个目录,而不是进程正在运行的目录。尽管如此,我在计算机上的任何地方都找不到任何其他 fileData.json 文件。还有一些其他奇怪的行为:

  1. 记录 __filename(应该记录整个文件路径)时,唯一打印的是没有前导文件路径的“/app.js”。

  2. 调用“process.cwd()”只会给我“/”

  3. 当使用完整文件路径“/Users/...”调用 fs.writeFile() 时,出现找不到文件夹错误

任何人都知道可能导致此行为的原因以及如何解决它?

编辑 - 我也尝试通过添加获取绝对路径

var path = require('path')
var appDir = path.resolve('./app');

当它应该返回绝对路径时,它再次只给我/app

最佳答案

你能确认不使用 browserify-fs 时的相同行为吗?只需使用普通的旧 fs。 (请注意,您可以直接从 Chrome 开发工具控制台执行此操作)。

查看 browserify-fs 的页面,它似乎使用名为 level-filesystem 的依赖项实现了一种虚拟文件系统。 (使用级别数据库)。因此,您期望创建的文件并未创建。它们是在 level db 数据库中创建的。您可能会在某处找到一个级别 db 文件,其中包含您尝试直接写入文件系统的信息。

对于 JSON 文件的简单写入/读取,我推荐 https://github.com/sindresorhus/electron-config .

关于node.js - fs.writeFile() 和 fs.readFile() 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40814065/

相关文章:

node.js - 优雅地关闭nodejs工作线程

electron - Electron 安装程序在错误的组中创建快捷方式

Electron 在没有任何信息的情况下死亡,现在怎么办?

node.js - Nightmare.js 条件浏览

mysql - NODEJS MySQL 绑定(bind)抛出 ER_PARSE_ERROR 1064

javascript - 使用 Node.js 对 JSON 中的字符串大小有限制吗?

javascript - Material UI 样式在组件中不起作用(警告 : several instances of `@material-ui/styles` )

javascript - React - 传递 Prop ,导航器中的设置错误?

reactjs - react 路由器 : Route defined in child component not working

node.js - Electron CustomScheme - 各种特权意味着什么?