背景
在 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 模块,安装时需要编译。其安装流程分为两步:
- 下载预编译二进制文件(prebuild-install)—— 因网络问题请求超时,跳过
- 本地编译(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 i,node-gyp 即可正常调用 MSVC 编译器完成构建。
小结
Node 原生模块(如 better-sqlite3、node-sass、canvas 等)在 Windows 上编译依赖 Visual Studio Build Tools。遇到 gyp ERR! find VS 类错误时,直接装上就行。