在Electron渲染器中导出/定义功能的正确方法

时间:2019-04-02 16:20:18

标签: javascript node.js electron amd

我有一个JS文件,正在使用app.js(例如:require)将其导入到Electron的“ main”(或后台进程)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

在网上搜索时,我遇到了这个answer,其中提到可以使用AMD方式代替commonJS方式。因此,我尝试了以下操作:(不确定这在语法上是否正确!)

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

但是失败了:

Uncaught ReferenceError: define is not defined

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

2 个答案:

答案 0 :(得分:0)

默认情况下,node.js不提供AMD。由Require.js和其他FW使用。以下是有关如何将其与节点一起使用的链接:

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

答案 1 :(得分:0)

结果是,我只是导出错误。 modules.export是失败点,因为modules上的renderer未定义。

相反,如果我执行以下操作以导出单个功能:

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

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

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

事情如我最初预期的那样。

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