# ego-client **Repository Path**: TheFreeOne/ego-client ## Basic Information - **Project Name**: ego-client - **Description**: 测试仓库test repository - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-26 - **Last Updated**: 2026-04-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # vite-electron 使用vue3 vite electron 多页模板 并使用bytenode加密main.js - 由于对`electron-builder-config.js`进行了部分设置,对依赖进行了优化,electron-build打包时不再重复打包render中vue的依赖,因为按道理dist中已经有了;在没有electron必须的依赖的时候,请将`electronRequireDependencies`设置成空 - 如果打包之后页面空白,`Control+Shift+I`打开开发工具进行调试 - 如果打包后启动报错,请`asar`设置成false,并检查依赖是否打包 ## bytenode > 开发模式下编辑jsc的原理看`vite.config.js`中的大概189行和`main.bytenode.js`文件,build的时候的编译jsc看`electron-builder-config.js`大概18行下的代码 如果不想使用加密功能 修改package.json中的` "main": "dist-electron/main.bytenode.js",`改成` "main": "dist-electron/main.js",` ,并在`electron-builder-config.js`中删除相关代码 ### electron 29.0.0 ```javascript /** * 29.0.0 * 现在通过 contextBridge 传送整个 ipcRenderer 模块作为对象,会在 bridge 的接收方收到一个 空对象。 此更改是为了消除/减轻一种安全隐患。 你不应该直接暴露 bridge 上的 ipcRenderer 或它的方法。 相反,应该提供一个像下面这样的安全包装器: */ contextBridge.exposeInMainWorld('app', { onEvent: (cb:Function) => ipcRenderer.on('foo', (e, ...args) => cb(args)), }); ``` ### 常见问题 #### 1. `Error: Electron failed to install correctly, please delete node_modules/electron and try installing again` 使用其他镜像路径重新安装electron 或者使用`npm install electron@27.3.11 --save-dev --verbose`查看下载的地址 #### 2. 开发的时候可以执行,打包之后启动提示`Invalid or incompatible cached data (cachedDataRejected) ` 开发的时候jsc文件时electron生成的,打包的时候jsc文件时本地的node生成的,两者的node版本不一样导致这种情况, - 解决方法1. 确定本地electron和node_modules中的版本是否一致,并确定electron使用的node版本和自己安装的node的版本是否一致 - 解决方法2 参考`node_modules/electron/dist/electron electron-builder-config.js` 并在运行完编译的方法后退出进程,让`electron-builder`继续执行 (参考`electron-builder-config.js`大概94行) > 参考命令`"build": "run-p type-check \"build-only {@}\" -- && node_modules/electron/dist/electron electron-builder-config.js && electron-builder --config electron-builder-config.js",` #### ` Electron failed to install correctly, please delete node_modules/electron and try installing again` 使用npm+官方镜像下载 或者 去`https://registry.npmmirror.com/binary.html?path=electron`下载后解压到node_modules/electron/dist中 然后在`node_modules/electron/path.text`设置内容`electron.exe` [安装指导](https://www.electronjs.org/zh/docs/latest/tutorial/installation) #### 关于electron-rebuild > -o 有时不生成.node文件,需要使用`-f -w` ### Recommended IDE Setup [VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin). ### 参考 - https://github.com/bytenode/bytenode - https://blog.csdn.net/cfqdream/article/details/122347127 ##### `main.bytenode.js` 文件备份 ```javascript /* eslint-disable no-undef */ // 备份 别删 'use strict' const bytenode = require('bytenode') const fs = require('fs') const v8 = require('v8') const path = require('path') const { app, dialog } = require('electron') // 开发模式下每次启动都删除main.jsc if (!app.isPackaged) { if (fs.existsSync(path.join(__dirname, './main.jsc'))) { fs.unlinkSync(path.join(__dirname, './main.jsc')) } } v8.setFlagsFromString('--no-lazy') const jscPath = path.join(__dirname, './main.jsc') // 开发模式下运行的时候才生成 if (!fs.existsSync(jscPath)) { bytenode.compileFile(path.join(__dirname, './main.js'), jscPath) } // preloadjs属于renderer进程,还是不加密号 // if (!fs.existsSync(path.join(__dirname, './preload.jsc'))) { // bytenode.compileFile(path.join(__dirname, './preload.js'), path.join(__dirname, './preload.jsc')) // } try { require(jscPath) } catch (error) { // 立即退出应用程序 console.log(error) dialog.showErrorBox('启动失败', error.message) app.exit(0) } ``` ``` # 1. 设置 Python $env:PYTHON = "py -3" # 2. 清理 Remove-Item -Recurse -Force node_modules Remove-Item package-lock.json # 3. 重装依赖 npm install # 4. 重建原生模块 npx electron-rebuild ```