我尝试在我的 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)?我在这里不明白什么?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号