记录 electron 开发过程中的bug

185 阅读3分钟

1 electron版本之间的适配

electron 与 node.js 之间是有一个版本之间的对应关系。如果没有对应上,会有一定的影响,例如 electron V 10.4.7 对应的node.js的版本是 12.16.3 Chrome的版本是85.0.4183.121。要注意这些之间的关系

2 不同开发者electron版本不同下的开发

在不同开发者下的electron的版本可能有所不同,导致一些api发生了很大的变化,这样在项目里面的需要做一个高低版本之间的一个适配,例如:在electronV14版本中 electron移除remote模块 需要重新安装依赖 npm install --save @electron/remote 才能够继续使用remote模块
注意 在做适配的过程中 require("@electron/remote/main").initialize(); 对于主线程main 的初始化语句 最多只可以有一句  不然会出现 在项目中 高版本不会发生bug 但是在低版本中 函数会触发两次的bug

3 electron可以引用C++编译出来的node文件和dll文件

c++ 有一个nan node和c++之间可以用nan层作为中转站互相传递消息,可以在electron项目的主线程中用
`__non_webpack_require__` 来引用对应的node文件 路径可以使用计算机内部的环境变量来查找,这样就可以在electron应用的前端页{vue, react}等上使用C++的函数,在C++函数的内部的 this和单页面的this所指向的地方并不是一个地方,C++函数的内部的this 指向的是整个electron的项目应用的根部,从这里出发可以找到每一个页面。

4 electron生成安装包

electron支持引入nsis脚本进行生成安装包的相关配置以及在安装包安装的时候的一些操作
nsis: {
"oneClick": false, // 创建一键安装程序还是辅助安装程序(默认是一键安装)
"allowElevation": true, // 是否允许请求提升,如果为false,则用户必须使用提升的权限重新启动安装程序 (仅作用于辅助安装程序)
"allowToChangeInstallationDirectory": true, // 是否允许修改安装目录 (仅作用于辅助安装程序)
"installerIcon": "public/timg.ico",// 安装程序图标的路径
"uninstallerIcon": "public/timg.ico",// 卸载程序图标的路径
"installerHeader": "public/timg.ico", // 安装时头部图片路径(仅作用于辅助安装程序)
"installerHeaderIcon": "public/timg.ico", // 安装时标题图标(进度条上方)的路径(仅作用于一键安装程序)
"installerSidebar": "public/installerSiddebar.bmp", // 安装完毕界面图片的路径,图片后缀.bmp,尺寸164*314 (仅作用于辅助安装程序)
"uninstallerSidebar": "public/uninstallerSiddebar.bmp", // 开始卸载界面图片的路径,图片后缀.bmp,尺寸164*314 (仅作用于辅助安装程序)
"uninstallDisplayName": "${productName}${version}", // 控制面板中的卸载程序显示名称
"createDesktopShortcut": true, // 是否创建桌面快捷方式
"createStartMenuShortcut": true,// 是否创建开始菜单快捷方式
"shortcutName": "SHom", // 用于快捷方式的名称,默认为应用程序名称
"include": "script/installer.nsi",  // NSIS包含定制安装程序脚本的路径,安装过程中自行调用  (可用于写入注册表 开机自启动等操作)
"script": "script/installer.nsi",  // 用于自定义安装程序的NSIS脚本的路径
"deleteAppDataOnUninstall": false, // 是否在卸载时删除应用程序数据(仅作用于一键安装程序)
"runAfterFinish": true,  // 完成后是否运行已安装的应用程序(对于辅助安装程序,应删除相应的复选框)
"menuCategory": false, // 是否为开始菜单快捷方式和程序文件目录创建子菜单,如果为true,则使用公司名称