在 Electron 的渲染器中 export/define 函数的正确方法

Correct way to export/define functions in Electron's Renderer

我有一个 JS 文件,我正在使用 require(例如:const myJS = require("./pathToMyJS/myJS");)

myJS.js 的内容:

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

而且我可以在 app.js 中使用 mFunc 作为 myJS.mFunc(param1); & 一切都很好。

然后,我尝试对“renderer”JS 执行相同的过程。所以我的 renderer.js 现在导入 const myOtherJS = require("./myJS/myOtherJS");,其中另一个 JS 文件遵循与 myJS.

完全相同的 module.exports 逻辑

并且根 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 方式而不是 commonJS 方式。所以我尝试了以下方法:(不确定这在语法上是否正确!)

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

但是失败了:

Uncaught ReferenceError: define is not defined

那么在渲染器中使用它们时定义导出函数的正确方法是什么?到目前为止,我一直在做的只是在它们自己的 JS 文件中编写函数(例如:function func1() { ...})并在 app.html 中将所有这些文件声明为 <script defer src="./funcFile1.js"></script>

默认情况下node.js不提供AMD。它被 Require.js 和其他 FW 使用。这是关于如何将它与节点一起使用的 link:

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

原来,我只是导出不正确。 modules.export 是失败点,因为 modulesrenderer 上未定义。

相反,如果我执行以下操作来导出单个函数:

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

然后导入到我的 renderer.js 中:

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

一切如我所料。

关于模块的 Google Developers Primer 有助于理解概念。