【问题标题】:Import my own files into the electron renderer process将我自己的文件导入到电子渲染器进程中
【发布时间】:2019-09-08 16:55:29
【问题描述】:

这看起来很愚蠢,但我需要帮助将一些源代码导入到电子渲染器进程中:

我有一个电子应用程序: index.html(加载带有标签的 window.js) - index.js - 窗口.js - 有用的函数.js

window.js,我想从useful_functions.js导入一些函数,所以我尝试了以下方法:

// fails with: Uncaught SyntaxError: Unexpected identifier
import { very_useful } from './useful_functions.js';

// fails with: Uncaught ReferenceError: require is not defined
const { very_useful } = require('./useful_functions.js');

// fails with: Uncaught ReferenceError: require is not defined
require('electron').remote.require('./useful_functions.js')

我也尝试了nodeIntegration 标志,但这也无济于事

注意:我不是在尝试导入 npm 模块,而是我自己的代码,在它旁边的另一个文件中。

我正在寻找示例,但我只找到仅包含基本文件的超小型示例。 (或者像 atom 这样的大型应用程序需要我一段时间才能弄清楚)

我还没有为这个项目设置 webpack,但我确信有一种更简单的方法来完成这个非常基本的任务......

感谢您的帮助。

【问题讨论】:

  • 您正在使用 ES6 功能,例如 import 和 require。你是否在项目中添加了像 Babel 这样的转译器?

标签: electron


【解决方案1】:

index.html中,使用require()而不是用标签加载window.js,即替换:

<script src="window.js"></script>

与:

<script>require('./window.js');</script>

那么,在window.js 中,下面的语句也应该起作用:

const { very_useful } = require('./useful_functions.js');

请注意,无论如何传递给new BrowserWindow() 的选项中都需要nodeIntegration: true

webPreferences:
{
    nodeIntegration: true
}

见:

函数和对象通过以下方式添加到模块的根目录中 指定特殊导出对象的附加属性。

模块的本地变量将是私有的,因为模块是 由 Node.js 封装在一个函数中(参见模块封装器)。

在执行模块的代码之前,Node.js 会用一个 如下所示的函数包装器:

(function(exports, require, 模块, __filename, __dirname) {
// 模块代码实际上就在这里
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    相关资源
    最近更新 更多