2016-11-26 22 views
1

我在寫一個使用電子的桌面應用程序並作出反應。我想在JSON文件中存儲一些信息。我已經嘗試了web-f和browserify-fs來完成這個任務,並且都沒有像預期的那樣工作。我的設置如下fs.writeFile()和fs.readFile()奇怪的行爲

項目/應用/(反應文件)

項目/ index.html的

項目/ JS/bundle.js

項目/ main.js

我使用watchify將反應文件中的所有更改編譯到bundle.js文件(由index.html讀取)。

從項目/應用/ 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)(它告訴我,/用戶無法找到)

做上述,如果我改變的WriteFile對ReadFile和日誌內容到控制檯,更新文件後被打印。即使我刪除了fileData.json文件,該文件也被成功讀取。

這使我相信fs.writeFile()正在寫入一個不同的目錄,而不是正在從中運行的目錄。儘管如此,我無法在計算機上的任何位置找到任何其他fileData.json文件。有一對夫婦其他奇怪的行爲:

  1. 當登錄__filename(應記錄整個文件路徑),打印的唯一的事情就是「/app.js」,沒有領先的文件路徑。

  2. 調用 「process.cwd()」 只是給了我 「/」

  3. 當調用fs.writeFile()有完整的文件路徑 「/用戶/ ......」 我得到的文件夾不發現錯誤

任何人都知道這可能是導致此行爲,以及如何解決它?

編輯 - 我也試圖通過增加獲得的絕對路徑

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

不使用時也只給了我當它應該返回一個絕對路徑

回答

0

,你能否證實相同的行爲/應用browserify-FS?只需使用普通的舊fs。 (請注意,您可以直接從Chrome開發工具控制檯執行此操作)。

查看browserify-fs的頁面,它看起來像使用名爲level-filesystem(它使用level db)的依賴關係實現了一種虛擬文件系統。所以你期望創建的文件不是。他們正在一個級別的數據庫中創建。你可能在某個地方找到了一個級別爲db的文件,這個文件中有你要直接寫入文件系統的信息。

對於簡單的寫入/讀取一個JSON文件,我建議https://github.com/sindresorhus/electron-config

+0

使用常規fs不起作用(給我未捕獲TypeError:_fs2.default.writeFile不是函數;導入如下: 從'fs'導入fs;) 雖然我可能會導入它不正確console.log(fs)給了我一個空的對象(做var fs = require(「fs」);也失敗了) 我原來切換到browserify-fs,因爲其他一些堆棧溢出帖子說你不能使用fs瀏覽器。我會研究一下electron-config,看起來它可以滿足我目前的需求;儘管我仍然希望能夠在未來閱讀和寫入應用程序的文件 –

+0

@AononWilson,這是因爲browserify會弄亂您的節點和電子核心模塊所需的所有內容(因爲它的名稱暗示,如果使用瀏覽器env)。在Electron中,所有node.js核心模塊都可以在渲染器進程中使用。在chrome開發工具中,你可以'require('fs')'。您可能想重新考慮browserify/webpack,因爲在Electron中,節點的「require」本地提供給您。我個人認爲捆綁Electron應用程序並不會帶來太多好處。 – ccnokes