В электронном режиме операции fs выполняются в ipcRenderer или ipcMain - PullRequest
0 голосов
/ 08 сентября 2018

В данный момент я читаю файлы в front/script/index.js (ipcRenderer)

 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)
})

Затем, когда мне нужно создать файл, я прошу ipcMain сделать это

   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, точно так же, как я fs.readdirSync прочитал все файлы.

Я знаю, что есть вещи, которые я не могу сделать в ipcRenderer, но я могу выполнять fs операций, нужно ли идти туда-сюда по этим вопросам?

1 Ответ

0 голосов
/ 08 сентября 2018

Это зависит. Если у вас есть только небольшие объемы данных для записи в файлы, вы можете сделать это в renderer.js. Если у вас большие объемы данных и вы не хотите, чтобы ваш пользовательский интерфейс блокировался, вам следует перенести операции fs в другой процесс.

Электрон здесь хитрый, даже если он сделает это в main.js, он все равно заблокирует пользовательский интерфейс: Ужас электрона Основной процесс В этом случае лучше всего создать второе окно BrowserWindow, сделать его невидимым и выполнять там тяжелые операции, в вашем случае fs.writeFile (). Это будет другой процесс и не будет блокировать пользовательский интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...