yarn安装electron-chromedriver报MSB4148配置错误如何解决
Windows下yarn安装electron-chromedriver报MSB4148错误解决方法
复现命令
yarn add --dev electron-chromedriver --network-timeout 100000
核心报错
MSBUILD : Configuration error MSB4148 "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0" has zero length
完整构建日志
gyp ERR! build error gyp ERR! stack Error: `C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe` failed with exit code: 1 gyp ERR! stack at ChildProcess.onExit (C:\Users\vipul\AppData\Roaming\nvm\v16.14.2\node_modules\npm\node_modules\node-gyp\lib\build.js:194:23) gyp ERR! stack at ChildProcess.emit (node:events:526:28) gyp ERR! stack at Process.ChildProcess._handle_onexit (node:internal/child_process:291:12) gyp ERR! System Windows_NT 10.0.19043 gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" gyp ERR! cwd C:\Users\vipul\software\desktop\webapp\src gyp ERR! node -v v16.14.2 gyp ERR! node-gyp -v v8.4.1 gyp ERR! not ok error Command failed with exit code 1.
问题根因
node-gyp调用Visual Studio 2017的MSBuild编译原生依赖时,读取MSBuild 4.0对应的注册表配置项发现值为空,无法定位.NET Framework 4.0构建工具路径,导致编译流程中断。
解决步骤
按顺序操作即可:
- 修复注册表配置
- 按
Win+R输入regedit回车打开注册表编辑器 - 定位到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0路径 - 找到
MSBuildToolsPath字符串值,将数值数据设置为C:\Windows\Microsoft.NET\Framework\v4.0.30319\ - 64位系统需要额外定位到
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\4.0路径,同步修改同名键值为上述路径 - 关闭注册表编辑器,重启终端后重新执行安装命令
- 按
- 补全VS构建组件
如果注册表修改后仍报错,打开Visual Studio 2017 Installer,勾选安装以下组件后重启系统重试:- 「使用C++的桌面开发」工作负载
- .NET Framework 4.0 目标包
- MSBuild生成工具
- 临时指定构建路径绕过注册表校验
执行安装命令前先在终端设置环境变量,指定VCTargets路径:set VCTargetsPath=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\ yarn add --dev electron-chromedriver --network-timeout 100000 - 跳过本地编译直接使用预编译包
不需要本地编译原生模块时,可设置环境变量跳过构建步骤,直接拉取官方预编译的chromedriver二进制文件:set ELECTRON_CHROMEDRIVER_SKIP_BUILD=true yarn add --dev electron-chromedriver --network-timeout 100000
内容的提问来源于stack exchange,提问作者Vipul Learning
相关产品推荐
相关产品推荐

