Windows下用electron-builder构建Electron应用签名报错求助
Electron-builder Windows构建代码签名相关报错解决方案
问题场景
在Windows系统使用electron-builder构建Electron应用时,因代码签名逻辑报错失败,核心错误信息:
Cannot use 'in' operator to search for 'file' in undefined
完整报错日志
PS C:\Users\PC\Documents\nodejs\StarLink> electron-builder • electron-builder version=24.9.1 os=10.0.19045 • loaded configuration file=package.json ("build" field) • author is missed in the package.json appPackageFile=C:\Users\PC\Documents\nodejs\StarLink\package.json • writing effective config file=dist\builder-effective-config.yaml • packaging platform=win32 arch=x64 electron=28.1.3 appOutDir=dist\win-unpacked ⨯ Cannot use 'in' operator to search for 'file' in undefined failedTask=build stackTrace=TypeError: Cannot use 'in' operator to search for 'file' in undefined at doSign (C:\Users\PC\AppData\Roaming\npm\node_modules\electron-builder\node_modules\app-builder-lib\src\codeSign\windowsCodeSign.ts:154:70) at sign (C:\Users\PC\AppData\Roaming\npm\node_modules\electron-builder\node_modules\app-builder-lib\src\codeSign\windowsCodeSign.ts:60:7) at WinPackager.sign (C:\Users\PC\AppData\Roaming\npm\node_modules\electron-builder\node_modules\app-builder-lib\src\winPackager.ts:213:20) at processTicksAndRejections (node:internal/process/task_queues:95:5) at WinPackager.signAndEditResources (C:\Users\PC\AppData\Roaming\npm\node_modules\electron-builder\node_modules\app-builder-lib\src\winPackager.ts:348:5) From previous event: at processImmediate (node:internal/timers:478:21) From previous event: at WinPackager.signApp (C:\Users\PC\AppData\Roaming\npm\node_modules\electron-builder\node_modules\app-builder-lib\src\winPackager.ts:384:27) at WinPackager.doSignAfterPack (C:\Users\PC\AppData\Roaming\npm\node_modules\electron-builder\node_modules\app-builder-lib\src\platformPackager.ts:332:32) at WinPackager.doPack (C:\Users\PC\AppData\Roaming\npm\node_modules\electron-builder\node_modules\app-builder-lib\src\platformPackager.ts:317:7) at WinPackager.pack (C:\Users\PC\AppData\Roaming\npm\node_modules\electron-builder\node_modules\app-builder-lib\src\platformPackager.ts:136:5) at Packager.doBuild (C:\Users\PC\AppData\Roaming\npm\node_modules\electron-builder\node_modules\app-builder-lib\src\packager.ts:442:9) at executeFinally (C:\Users\PC\AppData\Roaming\npm\node_modules\electron-builder\node_modules\builder-util\src\promise.ts:12:14) at Packager._build (C:\Users\PC\AppData\Roaming\npm\node_modules\electron-builder\node_modules\app-builder-lib\src\packager.ts:376:31) at Packager.build (C:\Users\PC\AppData\Roaming\npm\node_modules\electron-builder\node_modules\app-builder-lib\src\packager.ts:337:12) at executeFinally (C:\Users\PC\AppData\Roaming\npm\node_modules\electron-builder\node_modules\builder-util\src\promise.ts:12:14)
当前package.json配置
{ "name": "starlink-app", "version": "1.0.0", "description": "Starlink App", "main": "index.js", "scripts": { "start": "node index.js", "electron": "electron .", "prebuild": "npm install electron-builder@latest -D", "build": "electron-builder --win --x64 -c.verbose=true" }, "license": "MIT", "dependencies": { "cors": "^2.8.5", "dotenv": "^10.0.0", "express": "^4.17.1", "puppeteer": "^21.7.0", "puppeteer-extra": "^3.3.6", "puppeteer-extra-plugin-stealth": "^2.11.2", "semver": "^7.5.1", "simple-update-notifier": "^2.0.0" }, "devDependencies": { "electron": "^28.1.2", "electron-builder": "^24.9.1", "eslint": "^7.32.0", "eslint-config-airbnb-base": "^14.2.1", "eslint-plugin-import": "^2.25.3", "husky": "^7.0.1", "lint-staged": "^11.0.0", "nodemon": "^3.0.2", "prettier": "^2.4.1" }, "build": { "appId": "com.moglin.starlink-app", "files": [ "public/**/*", "index.js", "node_modules/**/*", "!node_modules/simple-update-notifier/**", "!node_modules/nodemon/node_modules/simple-update-notifier/**" ], "directories": { "output": "dist" }, "mac": { "target": "dmg" }, "win": { "target": "nsis", "icon": "icon.ico", "sign": false } } }
已尝试步骤
- 更新electron-builder至最新版本:
npm install electron-builder@latest -D - 在package.json的win配置中设置
sign: false禁用代码签名
解决方案建议
1. 全局禁用代码签名
将sign: false添加到build根节点,确保完全跳过签名流程,避免局部配置未生效的问题:
"build": { "appId": "com.moglin.starlink-app", "sign": false, // 全局层级禁用签名 "files": [ // 原有文件配置 ], "win": { "target": "nsis", "icon": "icon.ico" // 可移除win下的sign配置,或保留不影响 } }
2. 清理缓存后重新构建
执行以下命令清理依赖和构建缓存,排除旧配置干扰:
# 删除node_modules和锁文件 rm -Recurse node_modules rm package-lock.json # 重新安装依赖 npm install # 清理electron-builder缓存 npx electron-builder clean # 重新执行构建 npm run build
3. 降级electron-builder版本
最新版本可能存在兼容性bug,尝试降级至稳定版本(如24.6.4):
npm install electron-builder@24.6.4 -D
4. 补充package.json的author字段
报错日志提示author is missed in the package.json,补充该字段可避免潜在的配置解析异常:
{ "name": "starlink-app", "version": "1.0.0", "author": "Your Name <your.email@example.com>", // 补充作者信息 "description": "Starlink App", // 其他原有配置 }
5. 检查图标文件路径
确认icon.ico文件存在于项目根目录,路径错误可能导致签名流程中出现未定义变量问题。
内容的提问来源于stack exchange,提问作者AudioCloud
相关产品推荐
相关产品推荐

