最近用 Electron 开发一个需要在 Windows Server 2008 上运行的桌面应用,遇到了两个典型问题,记录下解决方案供自己日后参考。
问题1:PNPM 打包依赖问题
现象:
使用
pnpm
安装依赖后打包生成的 exe 文件运行时提示缺少模块
必须进入
release/win-unpacked/resources/app
目录执行pnpm install
才能运行拷贝到没有安装 pnpm 的电脑完全无法运行
原因:
PNPM 使用硬链接和符号链接管理依赖,Electron 打包工具无法正确处理这些链接关系。
解决方案:
改用传统的 npm install
安装依赖后再打包:
# 删除原有依赖 rm -rf node_modules rm package-lock.json # 使用npm重新安装 npm install # 然后打包 npm run build
优点:
打包后所有依赖会被正确包含
无需目标机器安装 pnpm
部署更简单
问题2:SSL 证书兼容性问题
现象:
在 Windows Server 2008 上运行
加载 HTTPS 内容时显示证书错误
现代证书不被旧系统信任
解决方案:
代码忽略证书错误(开发环境用)
// 主进程 main.js app.on('certificate-error', (event, webContents, url, error, certificate, callback) => { event.preventDefault(); callback(true); // 强制接受证书 });
总结
依赖管理:Electron 打包优先使用
npm
而非pnpm
证书问题:
开发时可代码忽略
生产环境需更新系统证书
终极方案:建议客户升级到更新的 Windows 版本
希望这些经验能帮助遇到同样问题的开发者。老系统兼容确实是个坑,能升级系统是最好的解决方案。
附兼容旧系统的配置:
{ "name": "zhiban", "version": "1.0.0", "main": "main.js", "scripts": { "start": "electron .", "pack": "electron-builder --dir", "build": "electron-builder" }, "build": { "appId": "com.zhiban", "productName": "zhiban", "files": [ "**/*" ], "directories": { "output": "release" }, "mac": { "category": "public.app-category.developer-tools", "target": [ "dmg", "zip" ] }, "win": { "icon": "robot_emoji.png", "target": [ { "target": "nsis", "arch": [ "x64", "ia32" ] } ] }, "linux": { "target": [ "AppImage", "deb" ] }, "asar": false, "extraResources": [] }, "devDependencies": { "electron": "22.3.27", "electron-builder": "23.6.0" }, "dependencies": { "jsdom": "^26.1.0" } }
评论