从 Electron 中所需的 JS 模块访问父变量

Posted

技术标签:

【中文标题】从 Electron 中所需的 JS 模块访问父变量【英文标题】:Access parent variables from required JS Modules in Electron 【发布时间】:2020-08-06 17:55:32 【问题描述】:

请耐心等待,这里有点二人组。 首先,我认为如果我的主要 JS 像这样设置是正确的..

const myModule = require('./myModule');
let parentVar = 'foo';
myModule.test();

..我像这样设置所需的模块..

module.exports = 
    test: ()=>
        console.log(parentVar);
    

..当主脚本调用myModule.test() 时它应该抛出一个错误,因为它无法访问parentVar? 这是我在传统 Web 构建中使用模块的经验和理解。

现在,我正在构建一个 Electron 应用程序(使用 Electron Forge),在这里我可以调用 myModule.test(),它成功了,似乎可以访问变量在主脚本中声明。

我试图理解为什么会这样,并且我可以看到两个可能相关或不相关的差异。

    我没有使用 webpack/babel,所以 JS 是我不使用的原始形式 通常使用。 我的require() 语句只有在我给出 相对于应用程序根目录而不是文件的完整路径 要求。

谁能解释一下为什么 required 模块可以访问 Electron 中 requirer 的属性?

谁能解释为什么我的 require 语句只适用于 Electron 中的根相对路径?

谢谢大家:)

编辑 这一切都发生在渲染器中。使用标准<script> 标记将主 JS 加载到我的 index.html 中。然后它需要那里的模块。

【问题讨论】:

这是渲染器的代码吗? @tpikachu - 是的(已编辑我的问题)。主脚本加载到 index.html 我明白了。使用require 表示您将在浏览器中使用 Node API 为此,您应该创建 nodeIntgeartion 为 true 的 browserWindow 点赞***.com/questions/60227586/… 【参考方案1】:

经典的简单易懂的问题。

我在 html 中包含我的主脚本时,我只需要给标签一个 type="module"。我想如果没有这个,脚本只是加载到页面中而没有任何模块化包装,这就是为什么该变量可以全面使用。

在我的index.html 中,脚本标签现在看起来像这样..

<script type="module" src="js/app.js"></script>

【讨论】:

以上是关于从 Electron 中所需的 JS 模块访问父变量的主要内容,如果未能解决你的问题,请参考以下文章

node.js 中所需的结构化库的最佳实践

使接受 Laravel 中所需的条款和条件字段

为所需的 dll 文件设置自定义路径:电子应用程序

如何从另一个表中获取数据并插入到 EF Core 中所需的表中

我想加载一个基于标志的特定类,而不是加载两个类并使用 Springs 中所需的一个

数据挖掘中所需的概率论与数理统计知识