Приложение Electron — разделить основной процесс на несколько файлов и поделиться переменной

#javascript #class #electron

#javascript #класс #electron

Вопрос:

Я разрабатываю приложение с помощью Electron, но у меня возникла проблема с обменом переменной между несколькими файлами.

В моем main.js Я создаю базу данных RxDB, которая используется для всего моего проекта. На этом уровне я также создаю обработчики, позволяющие осуществлять связь между основным процессом и процессом рендеринга через IPC. Эти обработчики вызывают различные классы, которые выполняют различные процессы, включая вставки в базу данных, модификации и т.д.

На мой взгляд, я не нашел эффективного способа передать мою переменную, содержащую мою базу данных, в мои классы.

В идеале я должен иметь возможность вызывать эту переменную базы данных (объявленную в main.js ) в любое время из любого класса. Я не могу использовать систему IPC, потому что моя возвращаемая переменная должна быть не JSON, а абсолютно объектом RxDatabase.

Вот очень упрощенная схема моего основного процесса:

Схема моего основного процесса

В настоящее время, чтобы поделиться переменной базы данных с моими классами:

  • Я объявляю переменную в main.js
  • Я передаю переменную в обработчики
  • Я передаю переменную своим классам в классе статических переменных

Несмотря на уродство, эта система работает. Но я думаю, что есть более правильный способ сделать это. Кроме того, становится трудно сохранить эту переменную, когда класс вызывает один или несколько экземпляров внешних классов.

Спасибо.

Комментарии:

1. Вы пробовали просто использовать module.export , а затем импортировать его в другие классы?

2. Это было так просто, спасибо, Люк! Я уже пробовал этот метод, но когда я попытался это сделать export {database} , у меня возникла ошибка экспорта неиспользованного токена . Итак, я предполагал, что для меня будет невозможно экспортировать переменную из main.js по некоторым неясным причинам, специфичным для Electron. На самом деле, мне просто пришлось использовать синтаксис ES5, таким образом exports.database = database . Затем я могу вызвать любой файл import { database } from 'main' , и это работает отлично. Большое спасибо!.

Ответ №1:

Вы можете использовать exports.variable = variable а затем import { variable } from 'file' в другом файле.

Комментарии:

1. Это спасает мне жизнь, спасибо, Люк!

Ответ №2:

Достаточно простого экспорта / импорта.

Ранее я пытался экспортировать свою переменную из main.js но когда я попытался использовать export {database} , у меня был Unexpeted token export error .Итак, я предполагал, что для меня будет невозможно экспортировать переменную из main.js по некоторым неясным причинам, специфичным для Electron.

На самом деле, вам просто нужно использовать синтаксис ES5, таким образом, exports.database = database в main.js. Затем вы можете импортировать эту переменную в любой файл вашего основного процесса.

Спасибо @Luke за его ответ.