You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 08:25:28