MacOS虚拟机运行Electron app执行npm start报Unknown system error -8
解决Electron在MacOS虚拟机中启动时的spawn错误(Unknown system error -8)
问题场景
Electron应用在Linux、Windows下正常运行,但在MacOS虚拟机执行npm start时抛出以下错误:
> NoRA@0.0.1 start > electron . node:internal/child_process:421 throw errnoException(err, 'spawn'); ^ Error: spawn Unknown system error -8 at ChildProcess.spawn (node:internal/child_process:421:11) at Object.spawn (node:child_process:761:9) at Object.<anonymous> (/Users/user/electron-test/node_modules/electron/cli.js:7:20) at Module._compile (node:internal/modules/cjs/loader:1376:14) at Module._extensions..js (node:internal/modules/cjs/loader:1435:10) at Module.load (node:internal/modules/cjs/loader:1207:32) at Module._load (node:internal/modules/cjs/loader:1023:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:135:12) at node:internal/main/run_main_module:28:49 { errno: -8, code: 'Unknown system error -8', syscall: 'spawn' } Node.js v20.11.1
错误源自node_modules/electron/cli.js的这行代码:
const child = proc.spawn(electron, process.argv.slice(2), { stdio: 'inherit', windowsHide: false });
环境为全新安装的Node.js,已执行npm install。
错误原因分析
该错误通常和以下因素相关:
- MacOS虚拟机架构与安装的Electron二进制架构不匹配(比如虚拟机是x86_64,却安装了arm64版本的Electron)
- Electron二进制文件损坏或未通过MacOS安全验证
- Node.js版本与Electron版本不兼容
修复步骤
1. 强制安装与虚拟机架构匹配的Electron
先检查虚拟机的MacOS架构:
uname -m
如果输出为x86_64,则强制安装x64架构的Electron:
rm -rf node_modules package-lock.json npm install --arch=x64
也可以在package.json的start脚本中指定架构:
"scripts": { "start": "electron . --arch=x64" }
2. 修复Electron二进制文件权限与完整性
- 清理npm缓存后重新安装:
npm cache clean --force rm -rf node_modules package-lock.json npm install
- 移除MacOS的扩展属性限制(解决未签名二进制被阻止的问题):
xattr -cr ./node_modules/electron/dist/Electron.app
- 尝试直接启动Electron验证二进制是否正常:
open ./node_modules/electron/dist/Electron.app
如果能正常启动,再执行npm start。
3. 调整MacOS安全设置
打开系统设置 → 隐私与安全性,查看是否有“已阻止Electron运行”的提示,点击“允许”即可。
4. 匹配Node.js与Electron版本兼容性
Node.js 20.x需要搭配Electron 25.x及以上版本,若当前Electron版本过低,执行升级:
npm install electron@latest --save-dev
内容的提问来源于stack exchange,提问作者Pablo Pazos
相关产品推荐
相关产品推荐

