解决Elctron打包成功,IPC无法注册问题。
解决Elctron打包成功,IPC无法注册问题。
核心问题原因
- IPC 处理程序未注册:主进程未注册
'resource:scanDirectory'通道的处理程序 - 注册时序问题:处理程序注册可能晚于渲染进程的 IPC 调用
- 模块加载失败:
registerResourceIpcHandlers()函数未被正确导入或执行
核心代码
ipcRegister.js
// 静态导入,确保构建工具能识别
import { registerFileSystemIpcHandlers } from '../../ipcHandlers/fileSystemHandler.js'
import { registerResourceIpcHandlers } from '../../ipcHandlers/resourceHandler.js'
const handlers = [
{ name: 'FileSystem', register: registerFileSystemIpcHandlers },
{ name: 'Resource', register: registerResourceIpcHandlers }
]
export async function registerAllIpcHandlers() {
for (const handler of handlers) {
try {
await handler.register()
console.log(`✅ ${handler.name} IPC 处理程序注册成功`)
} catch (error) {
console.error(`🛑 注册 ${handler.name} 失败:`, error)
throw new Error(`IPC 注册失败: ${handler.name} - ${error.message}`)
}
}
console.log('🎉 所有 IPC 处理程序注册完成')
}
main/index.js
import { app } from 'electron'
import { electronApp, optimizer } from '@electron-toolkit/utils'
import { setupAppLifecycle } from './modules/appLifecycle.js'
import { registerAllIpcHandlers } from './modules/ipcRegister.js'
import { createWindow } from './modules/windowManager.js'
// 当 Electron 完成初始化时触发
app.whenReady().then(async () => {
// 1. 设置应用用户模型 ID (主要用于 Windows)
electronApp.setAppUserModelId('com.electron')
// 2. 设置窗口快捷键监听 (如 F12 开发者工具)
app.on('browser-window-created', (_, window) => {
optimizer.watchWindowShortcuts(window)
})
// 3. 注册所有 IPC 处理程序
await registerAllIpcHandlers()
// 4. 创建主浏览器窗口
createWindow()
// 5. 设置应用激活时的行为 (主要用于 macOS)
setupAppLifecycle()
})
// 当所有窗口都关闭时触发
app.on('window-all-closed', () => {
// 在 macOS 上,应用程序和它们的菜单栏通常会保持活动状态,
// 直到用户明确退出(Cmd+Q)。
if (process.platform !== 'darwin') {
app.quit()
}
})
src/renderer/index.html
<!doctype html>
<html>
<head>
<meta charset="UTF-8"/>
<title>数据标注</title>
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
<!-- <meta-->
<!-- http-equiv="Content-Security-Policy"-->
<!-- content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:"-->
<!-- />-->
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>
项目地址
登峰造极的成就源于自律

浙公网安备 33010602011771号