从这段日志看,问题不在 electron-builder 本身,而是在 @electron/rebuild 触发的 node-gyp 编译原生模块 canvas 时,node-gyp@11.5.0 无法识别你机器上的 Visual Studio 2026(安装目录是 ...\Microsoft Visual Studio\18\...,因此报:

Error: Could not find any Visual Studio installation to use

这属于已知兼容性:node-gyp 直到 v12.1.0 才新增对 Visual Studio 2026(18.x)的支持。 (GitHub)
另外你用的 canvas@2.11.2Node 22 环境也经常会踩坑,而 Electron 38 内置的就是 Node 22.16.0。 (Electron)

下面给你两条可落地的修复路线(建议优先走路线 A)。


路线 A(推荐):升级 node-gyp 以支持 VS2026,并把 canvas 升到 3.x(N-API,预编译更友好)

1)在 package.json 里强制覆盖 node-gyp 版本(pnpm overrides)

在根 package.json 增加(或合并):

{
  "pnpm": {
    "overrides": {
      "node-gyp": "12.1.0"
    }
  }
}

原因:你当前栈里用的是 node-gyp@11.5.0,它不支持 VS 18.x;12.1.0 才支持。 (GitHub)

2)升级 canvas 到 3.x(强烈建议)

canvas 3.x 走 N-API,并且官方说明在 Windows x64 有预编译二进制,通常能显著降低“必须本机编译”的概率。 (Yarn)

如果 canvas 是你项目的直接依赖

pnpm add canvas@^3.2.1

如果 canvas 是间接依赖(你并未在 package.json 里显式依赖它),也可以用 overrides 强制抬升(谨慎用,可能影响上游包兼容性):

{
  "pnpm": {
    "overrides": {
      "canvas": "^3.2.1",
      "node-gyp": "12.1.0"
    }
  }
}

3)清理并重装,再打包

# 在项目根目录
Remove-Item -Recurse -Force node_modules
Remove-Item -Force pnpm-lock.yaml -ErrorAction SilentlyContinue
pnpm store prune

pnpm install
pnpm exec electron-builder
如果你仍看到 rebuild canvas:可以加 set DEBUG=electron-rebuild 观察它到底在用哪个 node-gyp/VS 探测路径。

4)确认 VS 安装了 C++ 工作负载(必要条件)

即便 node-gyp 能识别 VS,如果 未安装 “Desktop development with C++”(含 MSVC 工具链 + Windows SDK),也会继续失败(只是错误形态会变)。


路线 B(保守兜底):不改 node-gyp,改装 VS2022 Build Tools(让 node-gyp@11.5.0 能识别)

如果你暂时不想动依赖树,可以 并行安装 Visual Studio 2022 / Build Tools 2022(目录一般是 ...\17\...,并在 VS Installer 里勾选:

  • Desktop development with C++
  • MSVC v143
  • Windows 10/11 SDK

安装好后再重试打包。

但注意:你仍然在 Electron 38(Node 22)上用 canvas@2.11.2,后续可能会从“找不到 VS”变成“编译不通过/ABI 不兼容”等问题,因此路线 A 仍更稳。 (Electron)

可选绕行(不作为首选):跳过 electron-builder 的依赖重建

electron-builder 有 npmRebuild/hook 可以跳过依赖 rebuild。 (Electron Builder)
但这只有在你的原生依赖 本来就不需要针对 Electron 重新编译(例如 N-API 且二进制可用)时才安全;对你当前 canvas@2.11.2 这种情况不建议直接跳过。


你现在这条日志最“对症”的结论

  • 根因:node-gyp@11.5.0 不支持 VS2026(18.x)→ 判定“没有可用 VS”。 (GitHub)
  • 叠加风险:Electron 38 = Node 22.16.0,而 canvas@2.11.2 在 Node 22 上兼容性不佳。 (Electron)
  • 最稳修node-gyp 强制到 12.1.0 + canvas 升到 3.2.1(或至少 3.x)。 (GitHub)