如何导出preload1
,preload2
,preload3
并将其引入索引?
索引.ts
const test1 = require("./preload1")
const test2 = require("./preload2")
const test3 = require("./preload3")
const { contextBridge } = require('electron');
contextBridge.exposeInMainWorld('testApi', { test1, test2, test3 })
preload1.ts
const { contextBridge, ipcRenderer } = require('electron');
const test1 = async () => {
return await ipcRenderer.invoke('on-test-event')
}
export default {test1}
preload2.ts
const { contextBridge, ipcRenderer } = require('electron');
const test2 = async () => {
return await ipcRenderer.invoke('on-test-event')
}
export default {test2}
preload3.ts
const { contextBridge, ipcRenderer } = require('electron');
const test3 = async () => {
return await ipcRenderer.invoke('on-test-event')
}
export default {test3}
index.vue
console.log(testApi);
控制台错误
VM4 sandbox_bundle:93 Unable to load preload script: \electron-vite-vue\dist-electron\preloads\index.js
VM4 sandbox_bundle:93 Error: module not found: ./preload1
at preloadRequire (VM4 sandbox_bundle:93:1386)
at <anonymous>:2:17
at runPreloadScript (VM4 sandbox_bundle:93:2211)
at Object.<anonymous> (VM4 sandbox_bundle:93:2478)
at ./lib/sandboxed_renderer/init.ts (VM4 sandbox_bundle:93:2632)
at __webpack_require__ (VM4 sandbox_bundle:1:170)
at VM4 sandbox_bundle:1:1242
at ___electron_webpack_init__ (VM4 sandbox_bundle:1:1320)
at VM4 sandbox_bundle:160:455
如果我在索引中写入所有的preload,它工作正常:
索引.ts
const { contextBridge, ipcRenderer } = require('electron');
const test1 = async () => {
return await ipcRenderer.invoke('on-test-event')
}
const test2 = async () => {
return await ipcRenderer.invoke('on-test-event')
}
const test3 = async () => {
return await ipcRenderer.invoke('on-test-event')
}
contextBridge.exposeInMainWorld('testApi', {test1, test2, test3})
控制台
{test1: ƒ, test2: ƒ, test3: ƒ}
test1: ƒ ()
test2: ƒ ()
test3: ƒ ()
[[Prototype]]: Object
1条答案
按热度按时间fzsnzjdm1#
默认情况下,Electron的进程是sandboxed,这意味着你不能在渲染器中使用
require
,你只能在预加载中使用require
一些特定的模块:为了允许渲染器进程与主进程通信,附加到沙箱渲染器的预加载脚本仍将具有可用的Node.js API的polyfilled子集。暴露了类似于Node的
require
模块的require
函数,但只能导入Electron和Node的内置模块的子集:electron
(仅渲染器进程模块)沙盒是一种安全功能,但如果你真的想导入你的预加载文件,你只能通过在
BrowserWindow
的webPreferences
中禁用sandbox
来做到这一点: