Доступ к родительским переменным из обязательных JS модулей в электронном - PullRequest
1 голос
/ 23 апреля 2020

Смирись со мной, вроде двухчастного здесь. Во-первых, я прав, думая, что если у меня настроен основной 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() утверждения работать, только если я дам полный путь относительно приложения root, а не файла, выполняющего запрос.

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

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

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

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

1 Ответ

0 голосов
/ 24 апреля 2020

Classi c проблема с легкостью, когда вы знаете, как.

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

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

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

...