skip to content

Node.js
Windows 下 Node 原生模块编译失败排查记录

背景

在 Windows 平台执行 pnpm i 安装项目依赖时,better-sqlite3 模块编译失败,导致整个安装过程中断。

报错信息

关键报错如下:

node_modules/better-sqlite3: Running install script, failed in 5.8s
node_modules/better-sqlite3 install$ prebuild-install || node-gyp rebuild --release

│ prebuild-install warn install Request timed out
│ gyp ERR! find VS could not find a version of Visual Studio 2017 or newer to use
│ gyp ERR! find VS You need to install the latest version of Visual Studio
│ gyp ERR! find VS including the "Desktop development with C++" workload.

原因分析

better-sqlite3 是一个包含原生 C++ 代码的 Node 模块,安装时需要编译。其安装流程分为两步:

  1. 下载预编译二进制文件(prebuild-install)—— 因网络问题请求超时,跳过
  2. 本地编译(node-gyp rebuild)—— 机器上没有安装 Visual Studio Build Tools,编译失败

两步都走不通,安装就挂了。

解决方案

安装 Visual Studio 2022 Build Tools 及 C++ 桌面开发工作负载:

winget install Microsoft.VisualStudio.2022.BuildTools --override "--add Microsoft.VisualStudio.Workload.VCTools --includeRecommended"

安装完成后重新执行 pnpm inode-gyp 即可正常调用 MSVC 编译器完成构建。

小结

Node 原生模块(如 better-sqlite3node-sasscanvas 等)在 Windows 上编译依赖 Visual Studio Build Tools。遇到 gyp ERR! find VS 类错误时,直接装上就行。