Я создаю кроссплатформенное электронное приложение, используя vuejs и плагин vue-cli-electronic-builder. У меня есть поле ввода в форме, которое даст пользователю возможность отправить форму с некоторыми прикрепленными файлами, и я хочу обрабатывать файлы в фоновом процессе приложения. Как я могу отправить данные из пользовательского интерфейса vue в основной процесс электронного приложения?
Плагин vue-electronic-builder - передача данных формы из vue в основной электронный процесс
Ответы (1)
В электроне есть два процесса: основной процесс и процесс рендеринга. Компонент Vue работает в процессе рендеринга. Однако запись файлов выполняется в основном процессе, который обычно обозначается background.js
. Нам нужен способ связи между этими двумя процессами для записи данных. Этот способ называется inter-process communication
. Электрон обеспечивает ipcMain
& ipcRenderer
для связи между двумя процессами.
Предположим, вам нужно отправить данные из формы (компонент Vue) в основной процесс. Начнем с определения настраиваемого события в background.js
, например:
import {ipcMain} from "electron";
// this is the event listener that listens to the event emitted by the Vue component
ipcMain.on("form-submission-event", (event, args) => writeFormData(args));
В вашем компоненте Vue вы должны сделать следующее:
import {ipcRenderer} from "electron";
export default defineComponent({
methods: {
submitForm(data){
// this will send the data to the main process
ipcRenderer.send("form-submission-event", data)
}
}
}
Вы также можете передавать данные наоборот, то есть от основного процесса к процессу рендеринга. Подробнее читайте здесь: https://www.electronjs.org/docs/api/ipc-main и здесь https://www.electronjs.org/docs/api/ipc-renderer
Вы можете получить сообщение об ошибке, например, имя каталога не найдено. Чтобы исправить это, добавьте следующий код в vue.config.js
module.exports = {
pluginOptions: {
electronBuilder: {
nodeIntegration: true
}
}
};
nodeIntegration
, но получаю эту ошибку, когда запускаю приложение в режиме обслуживания ReferenceError: __dirname is not defined
. Я попытался перезапустить процесс, но ошибка все еще осталась, я не уверен, что не так
- person newbiedev; 04.12.2020
npm run electron:serve
? или вы получаете ошибку с npm run serve
?
- person Helper function; 04.12.2020
vue/cli 4.3.1
и создаю проекты с помощью vue ui, для плагина электронного строителя я использую версию "vue-cli-plugin-electron-builder": "^2.0.0-rc.5"
, в которой используется внутренний электронный "electron": "^9.0.0"
. Я использую команду npm run electron:serve
из vue ui
- person newbiedev; 04.12.2020
electron -v
из терминала macOS, я получаю v3.0.0
. Я пытался запустить npm uninstall electron && npm install electron@latest -g
, но он всегда будет устанавливаться v3.0.0
, может, я делаю это неправильно?
- person newbiedev; 04.12.2020
npm install [email protected]
.
- person Helper function; 04.12.2020
vue-cli-plugin-electron-builder
всегда будет устанавливать версию ^9.0.0
of electronics, я проверил онлайн-репозиторий github и не уверен, но кажется, что плагин обновлен для установки электронного v11.0.3
. Мне нужно попробовать установить электрон v11, как вы предложили, но я использую vue ui, поэтому я не знаю, будет ли обновлена старая версия электрона?
- person newbiedev; 04.12.2020
ReferenceError: __dirname is not defined
все еще остается и после обновления электрона до последней версии в качестве зависимости разработчика :(
- person newbiedev; 04.12.2020
vue-cli-plugin-electron-builder": "^2.0.0-rc.5
Думаю, это ошибка этого выпуска
- person newbiedev; 04.12.2020