Доступ к родительским переменным из необходимых модулей JS в Electron

Потерпите меня, здесь вроде как двое. Во-первых, правильно ли я думаю, что если мой основной JS настроен таким образом ...

const myModule = require('./myModule');
let parentVar = 'foo';
myModule.test();

..и я настроил требуемый модуль вот так ..

module.exports = {
    test: ()=>{
        console.log(parentVar);
    }
}

..то когда основной сценарий вызывает myModule.test(), он должен выдавать ошибку, поскольку не может получить доступ к parentVar? Это был мой опыт и понимание работы с модулями в традиционных веб-сборках.

Теперь я создаю приложение Electron (используя Electron Forge), и здесь я могу вызвать myModule.test(), и оно преуспевает, имея доступ к переменной, объявленной в основном скрипте. .

Я пытаюсь понять, почему это так, и вижу два различия, которые могут иметь значение, а могут и не иметь.

  1. Я не использую webpack / babel, поэтому JS находится в необработанном виде, с которым я обычно не работаю.
  2. Мои инструкции require() работают только в том случае, если я указываю полный путь относительно корня приложения, а не файла, выполняющего требуемые.

Может ли кто-нибудь объяснить, почему требуемый модуль может получить доступ к свойствам requirer в Electron?

Может ли кто-нибудь объяснить, почему мои операторы require работают только с корневыми относительными путями в Electron?

Спасибо всем :)

РЕДАКТИРОВАТЬ Все это происходит в рендерере. Основной JS загружается в мой index.html с использованием стандартного тега <script>. Затем требуется модуль оттуда.


person popClingwrap    schedule 23.04.2020    source источник
comment
Это код для рендерера?   -  person tpikachu    schedule 23.04.2020
comment
@tpikachu - Да (отредактировали мой вопрос). основной скрипт загружен в index.html   -  person popClingwrap    schedule 23.04.2020
comment
Понятно. использовать require означает, что вы собираетесь использовать Node API в своем браузере   -  person tpikachu    schedule 23.04.2020
comment
Для этого вы должны создать browserWindow с nodeIntgeartion как true   -  person tpikachu    schedule 23.04.2020
comment
Как этот stackoverflow .com / questions / 60227586 /   -  person tpikachu    schedule 23.04.2020
comment
@tpikachu - это я уже сделал. Я должен был заставить require работать в первую очередь. На самом деле ничего не сломано, просто кажется, что он ведет себя необычным образом. Боюсь, что если я пойду вперёд, не понимая почему, то позже выстрелу себе в ногу   -  person popClingwrap    schedule 24.04.2020


Ответы (1)


Классическая простая задача «когда-то-хау».

Когда я включаю свой основной скрипт в html, мне просто нужно было присвоить тегу type="module". Я предполагаю, что без этого сценарий просто загружался на страницу без каких-либо модульных оберток, поэтому переменная была доступна повсеместно.

В моем index.html тег скрипта теперь выглядит так ..

<script type="module" src="js/app.js"></script>

person popClingwrap    schedule 24.04.2020