node-gyp多VS环境安装rebuild出错解决_this is a bug in `node-gyp`.-程序员宅基地

技术标签: VS2015  npm  nodejs  windows  node-gyp  NodeJS  

Windows安装多个VS,使用node-gyp报错的解决方法

问题描述:

电脑上安装了vs2015,并且安装了node10.13.0,使用node-gyp正常,后来又安装了vs2019,使用npm install需要node-gyp rebuild的时候,就报错了。

部分报错内容:

gyp ERR! UNCAUGHT EXCEPTION
gyp ERR! stack Error: spawn D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\15.0\Bin\MSBuild.exe ENOENT
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:240:19)
gyp ERR! stack     at onErrorNT (internal/child_process.js:415:16)
gyp ERR! stack     at process._tickCallback (internal/process/next_tick.js:63:19)
gyp ERR! System Windows_NT 10.0.17134
gyp ERR! command "D:\\Program Files\\nodejs\\node.exe" "D:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" "--release"
gyp ERR! cwd D:\Program Files\nodejs\PalettenzettelGenerator\node_modules\synchronize\node_modules\fibers
gyp ERR! node -v v10.16.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! This is a bug in `node-gyp`.
gyp ERR! Try to update node-gyp and file an Issue if it does not help:
gyp ERR!     <https://github.com/nodejs/node-gyp/issues>
......

关于node-gyp,这个不详细说了,简单介绍下就是,gyp是谷歌在chromium中使用的生成不同平台不同编译器的项目文件。等同于cmake,node-gyp就是在node环境中使用的,在不同的平台选用对应平台的编译器,那么在Windows下就会去找VS。

出现上面的错误呢,就是安装node的时候,设置的编译器版本,路径和现在去找到不匹配,那现在有两种解决思路,一个是重新设置记录的编译器版本和路径,另一种就是按错误提示的,升级node-gyp。我用的是升级node-gyp的办法。

解决方法一:重新设置编译器版本和路径

  1. 可以尝试先更换路径:
    【npm config set msbuild_path “C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe”】
  2. 也可以尝试更换版本:【npm config set msvs_version 2019】(貌似不起作用)
  3. 也可以在每次npm install的时候设置版本:【npm install --msvs_version=2010】

首先说明的是我用更换路径的方式没有解决问题,有条件的同学可以在这个issue中看到更多讨论的细节和思路。

解决方法二:直接升级node-gyp

方法如下:
[搬运自(https://github.com/nodejs/node-gyp/issues/1753) 讨论中的joaocgreis]
node-gyp v5.0.0 is out with Visual Studio 2019 support. It’s not yet integrated into npm so it has to be installed manually. This should do it (only need to be run once):
【Windows Command Prompt】

npm install --global node-gyp@latest
for /f "delims=" %P in ('npm prefix -g') do npm config set node_gyp "%P\node_modules\node-gyp\bin\node-gyp.js"

【Powershell】

npm install --global node-gyp@latest
npm prefix -g | % {npm config set node_gyp "$_\node_modules\node-gyp\bin\node-gyp.js"}

That is, install node-gyp globally and make the npm config variable node_gyp point to node-gyp.js.
How to undo this after node-gyp is integrated into npm

npm uninstall --global node-gyp
npm config delete node_gyp
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lc315yuhuofei/article/details/106015745

智能推荐

基于水平集的图像分割方法_fcxvsd-程序员宅基地

文章浏览阅读1.2w次,点赞10次,收藏60次。一、引言借鉴一些流体中的重要思想, 1988年,Osher和Sethian首次提出了水平集算法[1],这是一种有效解决曲线演化问题的数值方法,并且计算稳定,适宜任意维数空间。随后,Osher等人对水平集算法做出扩展和总结[2,3], Giga也做了相关的理论扩展[4]。近年来这种算法已被广泛地应用在图像处理领域[5]中 ,尤其在图像分割中已取得了很大的进展。事实上,用水平集来解决图像分割问题的_fcxvsd

php var_export 对循环引用的问题(Uncaught ErrorException: var_export does not handle circular references)-程序员宅基地

文章浏览阅读4.9k次。因为有些数据不知道具体类型,在使用var_export($data, true) 的时候,遇到:Uncaught ErrorException: var_export does not handle circular references。改用: print_r($data, true) 即可解决这个问题。..._var_export does not handle circular references

matlab 生成文件夹,matlab实现遍历文件夹并自动创建对应的新文件夹方法-程序员宅基地

文章浏览阅读789次。能自动将文件夹中所有文件自动的识别并创建对应的文件夹,文件夹名要和文件中某个字段相同。用system()函数。如下tmp1=['mkdir ' dir_final];system(tmp1); %文件夹创建完成我试了下,用下面的函数系统就自动关机了,哈哈fun='shutdown -s';system(fun);你运行了?哈哈,别急赶紧在运行里输入shutdown -a 就取消自动关机了,不过..._natlab nkdir生成文件夹

Android - ImageButton单击切换按钮图片效果的实现_安卓imagebutton加入java-程序员宅基地

文章浏览阅读3.6k次。在android中有一个ImageButton的View,跟Button按钮的区别是可以在Imagebutton上加载一个图片。从ImageButton这个字面意思上来看,它是一个图片按钮,那么我们就可以使用它做一个我们想要的图片按钮了,但是我们在实际使用的过程当中,就会发现该按钮的使用并没有想像中的那么简单,需要再增加一些代码或再配置XML才能实现图片按钮按下的效果,个人感觉有点麻烦,不_安卓imagebutton加入java

IOS 关于NSNotification_nsnotification userinfo 什么类型-程序员宅基地

文章浏览阅读3.4k次。这是一个观察者模式。首先在你需要监听的类中加入观察者:- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;这个观察者在监听到anObject发送名字为aName的notification时,调用selector的方法,在aSelector方_nsnotification userinfo 什么类型

android bundler机制_安卓bundler机制-程序员宅基地

文章浏览阅读2.1k次。在android中提供了一种异步回调机制Handler,使用它,我们可以在完成一个很长时间的任务后做出相应的通知 handler基本使用: 在主线程中,使用handler很简单,new一个Handler对象实现其handleMessage方法,在handleMessage中提供收到消息后相应的处理方法即可,这里不对handler使用进行详细说明,在看本博文前,读者应_安卓bundler机制

随便推点

Cassandra配置多节点集群_cassandra_seeds-程序员宅基地

文章浏览阅读1.5k次。上一篇文章 Cassandra入门指南 中,我们已经配置好了一个单节点集群,接下来,我们要往这个集群中多加几个节点,看看多个节点是如何同时工作的。Cassandra节点之间交换信息是通过一种叫做Gossip(暂时不知道该翻译为哪个专有名词合适,暂且意会吧)的机制。但是要想让一个消息传递到一个新加入的节点,至少还需要知道另外一个节点,这个节点叫做种子(Seed)。通常我们会选择一小部分相对稳定的节点..._cassandra_seeds

python 如何调用子程序并自动传参数 os.system os.popen subprocess_python如何调用子程序-程序员宅基地

文章浏览阅读4.5k次,点赞4次,收藏14次。背景最近工作中有遇到这样一种情况,需要执行一个 exe 文件更改某些设置来触发Service 工作,而执行这个 exe 程序需要一个屏幕输入参数,这个输入参数也是需要python 脚本生成的。如果每次都是 cmd 执行这个 exe 程序,把..._python如何调用子程序

React 中 CSS in JS 的最佳实践_react使用scss-程序员宅基地

文章浏览阅读854次,点赞26次,收藏11次。本人分享一下这次字节跳动、美团、头条等大厂的面试真题涉及到的知识点,以及我个人的学习方法、学习路线等,当然也整理了一些学习文档资料出来是附赠给大家的。知识点涉及比较全面,包括但不限于前端基础,HTML,CSS,JavaScript,Vue,ES6,HTTP,浏览器,算法等等详细大厂面试题答案、学习笔记、学习视频等资料领取,点击资料领取直通车!!全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**_react使用scss

小程序跳转外链_外链跳转小程序-程序员宅基地

文章浏览阅读2.2k次。小程序跳转外链_外链跳转小程序

微信内置WeixinJSBridge_weixinjsbridge.call-程序员宅基地

文章浏览阅读941次。微信H5页面(关闭页面&&退出网页)isWechat = () => { let ua = window.navigator.userAgent.toLowerCase(); return ua.match(/MicroMessenger/i) == 'micromessenger';};if (isWechat()) { WeixinJSBri..._weixinjsbridge.call

PHP setcookie() 首次存储不上值_首次set-cookie-程序员宅基地

文章浏览阅读888次。客户端:可以看到,浏览器(客户端)向服务器发出一次请求,发出请求的时候,在请求头信息中带上了各种参数,告诉服务器,我要接收什么样的文本(Accept)、什么编码格式(Accept-Encoding)、什么语言(Accept-Language)等等,当然,还把Cookie也传到了服务器(Cookie)。服务器端:第一步:setcookie('a','value')因为cookie是设..._首次set-cookie