Правильный способ экспорта / определения функций в Electron's Renderer - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть файл JS, который я импортирую в "Electron" " main " (или фоновый процесс), app.js, используя require (например: const myJS = require("./pathToMyJS/myJS");)

Содержимое myJS.js:

module.exports = {
  mFunc: function mFunc(param1) {
    ...
  }
};

И я могу использовать mFunc в app.js как myJS.mFunc(param1); и все отлично.

Затем я попытался выполнить тот же процесс для " renderer " JS. Поэтому мой renderer.js теперь импортирует const myOtherJS = require("./myJS/myOtherJS");, где этот другой JS-файл следует той же логике module.exports, что и myJS.

И корневой HTML (app.html) объявляет renderer как <script defer src="./renderer/renderer.js"></script>.

Но при запуске я получаю:

Uncaught TypeError: Cannot set property 'exports' of undefined
at renderer.js? [sm]:34

Выполняя поиск в Интернете, я наткнулся на ответ , в котором упоминается, что вместо AMD можно использовать способ AMD. Поэтому я попробовал следующее: (не уверен, правильно ли это синтаксически!)

define(
  ["renderer"],
function rFunc(param1) { 
  ... }
)

Но это не так с:

Uncaught ReferenceError: define is not defined

Так, как правильно определить функции для экспорта при их использовании в рендерере? До сих пор я просто писал функции в их собственных файлах JS (например: function func1() { ...}) и объявлял все эти файлы в app.html как <script defer src="./funcFile1.js"></script>.

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Оказывается, я просто неправильно экспортировал. modules.export был точкой отказа, так как modules не определен на renderer.

Вместо этого, если я сделаю следующее для экспорта отдельных функций:

// ./myJS/myOtherJS.js
export function rFunc() { ...}

А затем импортировать в мой renderer.js как:

import { rFunc } from './myJS/myOtherJS';
rFunc();

Все работает так, как я ожидал.

Этот Учебник для разработчиков Google по модулям был полезен для понимания концепций.

0 голосов
/ 02 апреля 2019

AMD не предоставляется node.js по умолчанию. Он используется Require.js и другими FW. Вот ссылка на то, как вы можете использовать его с узлом:

https://requirejs.org/docs/node.html

...