electron-builder
从这段日志看,问题不在 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.2 在 Node 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 这种情况不建议直接跳过。
你现在这条日志最“对症”的结论
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。