在 Electron 渲染器中导出/定义函数的正确方法
我有一个 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>
。
结果发现,我只是导出不正确。
modules.export
是失败点,因为
modules
在
renderer
上未定义。
相反,如果我执行以下操作来导出各个函数:
// ./myJS/myOtherJS.js
export function rFunc() { ...}
然后导入到我的
renderer.js
中,例如:
import { rFunc } from './myJS/myOtherJS';
rFunc();
事情按照我最初的预期进行。
这个关于模块的 Google Developers Primer 有助于理解这些概念。
默认情况下,node.js 不提供 AMD。它由 Require.js 和其他 FW 使用。以下是有关如何在 node 中使用它的链接: