我尝试在renderer
进程中使用Node模块(例如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
)?我还有什么不理解的地方吗?
preload.ts
,并且像这样进行处理:https://dev59.com/kVMI5IYBdhLWcg3wVqCm - David Raschfs
,你知道直接在 preload 中使用它是否会存在任何安全风险吗? - Arkellyspath.join(__dirname, 'preload.js')
不起作用,那么请使用__static
。我的问题和解决方案可以在 https://dev59.com/XVIH5IYBdhLWcg3wKqI7#68795261 找到。 - Андрей Сорока