【问题标题】:fs.writeFile() and fs.readFile() strange behaviorfs.writeFile() 和 fs.readFile() 奇怪的行为
【发布时间】:2016-11-28 11:11:53
【问题描述】:

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

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

项目/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() 时,我收到未找到文件夹错误

有谁知道导致这种行为的原因以及如何解决它?

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

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

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

【问题讨论】:

    标签: node.js reactjs electron


    【解决方案1】:

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

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

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

    【讨论】:

    • 使用常规 fs 不起作用(给我未捕获的 TypeError:_fs2.default.writeFile 不是函数;导入如下:import fs from 'fs';)虽然我可能导入不正确,因为做 console.log(fs) 给了我一个空对象(做 var fs = require("fs"); 也失败了)我最初切换到 browserify-fs 因为其他一些堆栈溢出帖子说你不能使用来自浏览器的 fs。我会研究一下电子配置,似乎它可以满足我当前的需求;虽然我仍然希望将来能够从应用程序读取和写入文件
    • @AaronWilson 那是因为 browserify 会弄乱你所有的节点和电子核心模块所需的(因为 browserify,顾名思义,是用于节点化浏览器环境)。在 Electron 中,所有 node.js 核心模块都可以在渲染器进程中使用。在 chrome 开发工具中,你可以require('fs')。您可能需要重新考虑 browserify/webpack,因为在 Electron 中,您可以在任何地方原生地为您提供节点的 require。我个人认为在 Electron 应用中捆绑并没有多大好处。
    猜你喜欢
    • 2020-05-28
    • 2012-08-07
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 2011-10-04
    • 2015-03-16
    • 2017-07-04
    相关资源
    最近更新 更多