在 Electron 中正确利用 preload.js:综合指南
P粉197639753
P粉197639753 2023-08-27 20:25:30
[React讨论组]

我尝试在我的 renderer 进程中使用节点模块(在本例中为 fs),如下所示:

// main_window.js
const fs = require('fs')

function action() {
    console.log(fs)
}

注意:当我按下 main_window 中的按钮时,会调用 action 函数。

但这会产生错误:

Uncaught ReferenceError: require is not defined
    at main_window.js:1

我可以解决这个问题,正如这个接受的答案所建议的,通过在初始化 main_window 时将这些行添加到我的 main.js 中:

// main.js
main_window = new BrowserWindow({
    width: 650,
    height: 550,
    webPreferences: {
        nodeIntegration: true
    }
})
但是,根据文档,这不是最好的做法,我应该创建一个 preload.js 文件并在其中加载这些 Node 模块,然后在我的所有 renderer 中使用它流程。像这样:


main.js:

main_window = new BrowserWindow({
    width: 650,
    height: 550,
    webPreferences: {
        preload: path.join(app.getAppPath(), 'preload.js')
    }
})

preload.js:

const fs = require('fs')

window.test = function() {
    console.log(fs)
}

main_window.js:

function action() {
    window.test()
}

而且它有效!


现在我的问题是,我应该在 preload.js 中编写 renderer 进程的大部分代码,这不是违反直觉的吗(因为只有在 preload.js 中我才能访问 Node 模块)然后仅调用每个 renderer.js 文件中的函数(例如此处,main_window.js)?我在这里不明白什么?

P粉197639753
P粉197639753

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号