electron踩坑笔记

274 阅读2分钟

electron安装错误

配置.npmrc

electron_mirror=https://npmmirror.com/mirrors/electron/
# 阿里云采用双份拷贝策略,即x.x版本的electron存储时既有 vx.x也有x.x
electron_custom_dir={{ version }}

安装electron-fix

pnpm add  electron-fix

配置package.json并执行electron-fix

"scripts": {
    "dev": "chcp 65001 && vite",
    "build": "vue-tsc && vite build && electron-builder",
    "preview": "vite preview",
    "fix": "electron-fix start" // 安装完整版electron
  }

electron安装运行ws库错误

采用ES modules导入ws时报错

could not resolve "bufferutil" imported by "ws". is it installed?

解决方法

pnpm add --save-optional bufferutil
pnpm add --save-optional utf-8-validate

pnpm 打包错误

这是一个由pnpm导致的问题,起初没有使用含有 sqllite3 的模块,构建是没有问题的,使用了 sqllite3 之后,在 electron-builder 进行构建时显示 xxx\pnpm.cjs 不是一个合法的 Win32 应用。

⨯ cannot execute  cause=fork/exec C:\Users\17910\AppData\Local\Volta\tools\image\pnpm\10.12.3\bin\pnpm.cjs: %1 is not a valid Win32 application.
command='C:\Users\qwq\AppData\Local\Volta\tools\image\pnpm\10.12.3\bin\pnpm.cjs' rebuild bufferutil@4.0.9 utf-8-validate@6.0.5

pnpm.cjs 文件上方有一个 shebang (#!开头 ):

#!/usr/bin/env node

最初在类unix操作系统中一个文本文件带有 #! 开头,就会当做一个执行文件来运行。而 /usr/bin/env node 其实表示的是通常情况下在 Linux 系统中安装的 nodeJS 二进制文件目录,相当于 Windows上的 Node.exe 的绝对路径。放在windows上面时,这个路径就会产生错误。

解决方法:

将第一行替换为:

#!node

无法解决请查询:

github.com/v9u/sqlite_… github.com/electron-us…

控制台乱码

配置package.json

chcp 65001 && vite

Pnpm+electron-builder打包依赖错误

electron-builder打包不会自动打包隐式依赖,也就是说不会打包三方依赖引用的依赖,与pnpm的实现有关,需要拍平pnpm依赖或者手动安装

.npmrc文件加入下面的配置即可拍平

node-linker=hoisted

node regedit 打包后缺少vbs文件

 Error invoking remote method 'get-3dapp-devices': Error: Command failed: cscript.exe //Nologo C:\Program Files\YourAppName\resources\app.asar\node_modules\regedit\vbs\regList.wsf A HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\ HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\App Paths\ HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\

解决方法

打包配置

  "extraFiles": [
    {
      "from": "node_modules/regedit/vbs",
      "to": "vbs"
    }
  ],

使用时引入

const regedit = require('regedit')

regedit.setExternalVBSLocation('./vbs')