一文解决所有node-gyp报错
前言
这几天搞 canvas 项目迁移,执行npm install canvas
就报各种node-gyp
或node-pre-gyp
的错误,什么样的错误都有,而且一报还报一大堆刷屏,期间踩了各种 python、 vs 的 坑,真的神烦!!跟姐妹说我每天都想揍人,她学中医,推荐吃了加味逍遥丸,服用两天后心平气和,摆脱了尘世的欲望,能让我更能沉下心来解决这个问题。
先展示一下,成功安装的截图
安装成功后,没想到就这么几行反馈信息,当时还不可置信的怀疑自己在梦里。好,废话太多,原谅我太兴奋了~开始正题
环境除了 node 不多说,必须要装 python 和 visual studio,以下是我的环境,不必和我环境对齐,仔细看报错信息即可。
node v16.13.0
npm 8.1.4
node-gyp v8.4.1
Python 3.10.12
visual studio community 2022
windows 11
配置环境
python
每个 node-gyp 适配的 python 版本不一样,一定要认真读报错,他会告诉你是用什么 python 版本,大多数都是 python3+。这里推荐安装anaconda对 python 版本进行管理。
装完后,命令行检查
python --version
没有输出版本号,就去配环境变量
visual studio
node-gyp 报错原因,大部分都是因为 visual studio 没安装好,按照下面的步骤逐一核对,每一步配置完成可install
试试
1. 核对安装路径
网上很多文章都让直接npm install --global --production windows-build-tools --vs2015
就好,但我没生效,这里见仁见智,如果你之前没装过 vs 可以试试。
新安装 visual studio 最好使用默认路径,如果你早就安装了但改变了安装位置,最好完全卸载后重新安装(有可能改变安装位置的时候,输入框置灰,这时要更改注册表,参考Visual Studio 2019,2017,2022 安装时,共享组件、工具和 SDK 的路径不能更改)我一直装不上的原因,就是因为 vs 装在 D 盘了,node-gyp 一直没找到 package 目录。。。
2. 指定 msvs_version 和 msbuild_path
网上很多文章都只让设置 msvs_version
而 没设置msbuild_path
,这两个东西看你报错进行指定,如果他说你没指定 msvs_version 版本号,就
npm config set msvs_version=2022
如果他说,找不到“visual Studio C++ core features”啊,或是报你 “msvs_version 和 VS Command Prompt 版本不匹配啊” 都是没设置 msbuild_path,node-gyp 很傻的~
npm config set msbuild_path "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe"
3. 找不到 windows sdk
这是困扰我一上午的问题,有两个原因
(1)没安装 windows sdk
打开 visual studio installer(windows 直接搜),找到已安装的 vs 后,点击修改,找到你系统的 sdk,安装,如下
之后 install 即可
(2)已安装 windows sdk,但报错还是说 missing any Windows SDK
进入你 vs 安装目录,根据你的系统版本,全局搜索文件名,参照下面的文件名。比如我是 win11,我就在这个目录里搜 “Microsoft.VisualStudio.Component.Windows11SDK”
// 以下为node-gyp源码,他找sdk会按照安装目录下查找以下prefix。。所以你package或shared目录装到了其他目录下,他就找不到,特别傻。。
getSDK: function getSDK(info) {
const win8SDK = 'Microsoft.VisualStudio.Component.Windows81SDK'
const win10SDKPrefix = 'Microsoft.VisualStudio.Component.Windows10SDK.'
const win11SDKPrefix = 'Microsoft.VisualStudio.Component.Windows11SDK.'
// ...
}
如果没找到,就说明你 package 目录有问题,先检查一下报错信息,是不是有 VCINSTALLDIR not set, not running in VS Command Prompt
,在 VS Command Prompt 中用 admin 权限打开,写入环境变量:
SET VSINSTALLDIR=C:\Program Files\Microsoft Visual Studio\2022\Community\
之后在 cmd 中,键入set
,查看是否设置成功,再 install 一下。如果还不行,还是报 vs 相关的错误的话,仔细阅读报错,只能完全卸载 vs 后重装了。
总结
这个坑最终解下来非常有成就感,自己也在配置的期间,熟悉了很多命令行,还看了 node-gyp 的部分源码。其实自己一直没解开的原因是,没有全部看完报错信息,眼睛先扫 throw stack Error 的那一行,忽略了前面的日志。明明人家给你了日志,却让自己在一个黑盒里瞎解、盲试,导致耽误了太多太多的时间~ 期间查阅了很多 github 和 stackoverfow 的回答,有的问题也没解开,最终无奈下去查源码,才发现了自己的问题。 以这文警醒自己不要太过浮躁,遇到问题,稳住!