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

时间:2016-11-26 01:23:42

标签: node.js reactjs electron

我正在使用电子编写桌面应用程序并做出反应。我想将一些信息存储在JSON文件中。我已经尝试过web-fs和browserify-fs来实现这一点,而且两者都没有按预期工作。我的设置如下

项目/ app /(反应文件)

项目/ 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");
   });

'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()时,我找不到文件夹错误

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

    编辑 - 我也尝试通过添加

    来获取绝对路径
    var path = require('path')
    var appDir = path.resolve('./app');
    

    再次只给我/ app它应该返回一个绝对路径

1 个答案:

答案 0 :(得分:0)

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

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

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