在电子中,fs操作是在ipcRenderer或ipcMain中完成的

时间:2018-09-08 04:50:13

标签: node.js electron

此刻,我在new Chart(context, config)(ipcRenderer)中读取文件

front/script/index.js

然后,当我需要创建文件时,我要求ipcMain进行

 readTitles('./data').map(({title, dir}) => {
    el = document.createElement("li");
    text = document.createTextNode(`${title.split('.md')[0]}`);
    el.appendChild(text)
    readFileContent(dir, el)
    document.getElementById('titles').appendChild(el)
})

基本上来回走动

   form.addEventListener('submit', function(e){
        e.preventDefault()
        ipcRenderer.send(NEW_DOCUMENT_SAVE_NEEDED, { // alerting ./main.js
            fileName: e.target[0].value
          })
        console.log(e.target[0].value)
    })

就像发送ipcMain.on(NEW_DOCUMENT_SAVE_NEEDED, (event, {fileName}) => { fs.writeFile(`./${fileName}.md`, "Hey there!", function(err) { if(err) { return console.log(err); } console.log("The file was saved!"); }); window.webContents.send(FILE_CREATED, { message: 'The file was saved!', payload: { fileName, dir: `./data/${fileName}.md` } }) }) 来读取所有文件一样,我可以在那里发送NEW_DOCUMENT_SAVE_NEEDED而不是发送fs.writeFile

我知道在ipcRenderer中有些事情我不能做,但是我可以做fs.readdirSync操作,是否需要在这些方面来回走动?

1 个答案:

答案 0 :(得分:0)

这取决于。 如果只有少量数据要写入文件,则可以在renderer.js中进行操作。 如果您有大量数据,并且不想阻塞UI,则应将fs操作移至其他进程。

电子在这里很棘手,即使在main.js中这样做仍然会阻止UI:Horror of Electron Main Process 此处的最佳实践是创建第二个BrowserWindow,使其不可见,并在其中进行繁重的操作(以您的情况为fs.writeFile())。这将是一个不同的过程,并且不会阻止UI。