fs.writeFile() 和 fs.readFile() 奇怪的行为
fs.writeFile() and fs.readFile() strange behavior
我正在使用 Electron 和 React 编写桌面应用程序。我想将一些信息存储在 JSON 文件中。我试过 web-fs 和 browserify-fs 来完成这个,但都没有按预期工作。我的设置如下
project/app/(反应文件)
project/index.html
project/js/bundle.js
project/main.js
我正在使用 watchify 将反应文件中的所有更改编译到 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 文件。还有一些其他奇怪的行为:
当记录 __filename(应该记录整个文件路径)时,唯一打印的是没有前导文件路径的“/app.js”。
调用 "process.cwd()" 只会给我 "/"
使用完整文件路径“/Users/....”调用 fs.writeFile() 时,出现找不到文件夹错误
任何人都知道可能导致此行为的原因以及如何解决它?
编辑 - 我还尝试通过添加
获取绝对路径
var path = require('path')
var appDir = path.resolve('./app');
当它应该返回绝对路径时,它再次只给我 /app
您能否确认不使用 browserify-fs 时的相同行为?只需使用普通的旧 fs
。 (请注意,您可以直接从 Chrome 开发工具控制台执行此操作)。
查看 browserify-fs 的页面,它似乎使用称为 level-filesystem 的依赖项(使用 level db)实现了一种虚拟文件系统。因此,您期望创建的文件并未创建。它们是在 level db 数据库中创建的。您可能会在某处找到一个级别 db 文件,其中包含您尝试直接写入文件系统的信息。
对于 JSON 文件的简单 writing/reading,我推荐 https://github.com/sindresorhus/electron-config。
我正在使用 Electron 和 React 编写桌面应用程序。我想将一些信息存储在 JSON 文件中。我试过 web-fs 和 browserify-fs 来完成这个,但都没有按预期工作。我的设置如下
project/app/(反应文件)
project/index.html
project/js/bundle.js
project/main.js
我正在使用 watchify 将反应文件中的所有更改编译到 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 文件。还有一些其他奇怪的行为:
当记录 __filename(应该记录整个文件路径)时,唯一打印的是没有前导文件路径的“/app.js”。
调用 "process.cwd()" 只会给我 "/"
使用完整文件路径“/Users/....”调用 fs.writeFile() 时,出现找不到文件夹错误
任何人都知道可能导致此行为的原因以及如何解决它?
编辑 - 我还尝试通过添加
获取绝对路径var path = require('path')
var appDir = path.resolve('./app');
当它应该返回绝对路径时,它再次只给我 /app
您能否确认不使用 browserify-fs 时的相同行为?只需使用普通的旧 fs
。 (请注意,您可以直接从 Chrome 开发工具控制台执行此操作)。
查看 browserify-fs 的页面,它似乎使用称为 level-filesystem 的依赖项(使用 level db)实现了一种虚拟文件系统。因此,您期望创建的文件并未创建。它们是在 level db 数据库中创建的。您可能会在某处找到一个级别 db 文件,其中包含您尝试直接写入文件系统的信息。
对于 JSON 文件的简单 writing/reading,我推荐 https://github.com/sindresorhus/electron-config。