开发者问题收集

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

2019-04-02
4832

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

2个回答

结果发现,我只是导出不正确。 modules.export 是失败点,因为 modulesrenderer 上未定义。

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

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

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

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

事情按照我最初的预期进行。

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

Neil P.
2019-04-04

默认情况下,node.js 不提供 AMD。它由 Require.js 和其他 FW 使用。以下是有关如何在 node 中使用它的链接:

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

Nelson Teixeira
2019-04-02