解决node-gyp报错:KeyError 2017
Posted 岬淢箫声
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决node-gyp报错:KeyError 2017相关的知识,希望对你有一定的参考价值。
node-gyp因为不兼容Visual Studio 2017,所以报错:KeyError:2017,它的检测代码是node-gyp模块下一个名为
MSVersion.py文件,第434行代码:
def SelectVisualStudioVersion(version='auto', allow_fallback=True):
"""Select which version of Visual Studio projects to generate.
Arguments:
version: Hook to allow caller to force a particular version (vs auto).
Returns:
An object representing a visual studio project format version.
"""
# In auto mode, check environment variable for override.
if version == 'auto':
version = os.environ.get('GYP_MSVS_VERSION', 'auto')
version_map =
'auto': ('14.0', '12.0', '10.0', '9.0', '8.0', '11.0'),
'2005': ('8.0',),
'2005e': ('8.0',),
'2008': ('9.0',),
'2008e': ('9.0',),
'2010': ('10.0',),
'2010e': ('10.0',),
'2012': ('11.0',),
'2012e': ('11.0',),
'2013': ('12.0',),
'2013e': ('12.0',),
'2015': ('14.0',),
override_path = os.environ.get('GYP_MSVS_OVERRIDE_PATH')
if override_path:
msvs_version = os.environ.get('GYP_MSVS_VERSION')
if not msvs_version:
raise ValueError('GYP_MSVS_OVERRIDE_PATH requires GYP_MSVS_VERSION to be '
'set to a particular version (e.g. 2010e).')
return _CreateVersion(msvs_version, override_path, sdk_based=True)
version = str(version)
versions = _DetectVisualStudioVersions(version_map[version], 'e' in version)
if not versions:
if not allow_fallback:
raise ValueError('Could not locate Visual Studio installation.')
if version == 'auto':
# Default to 2005 if we couldn't find anything
return _CreateVersion('2005', None)
else:
return _CreateVersion(version, None)
return versions[0]
从代码逻辑可以看出,它支持两个环境变量:GYP_MSVS_VERSION与GYP_MSVS_OVERRIDE_PATH。
我在执行npm install之前首先运行:
set GYP_MSVS_VERSION=2015
set GYP_MSVS_OVERRIDE_PATH=C:\\Program Files (x86)\\Microsoft Visual Studio 14.0
问题就解决了。
最后提示:请确认当前机器安装了Visual Studio 2015。我的机器同时安装了两个版本。
以上是关于解决node-gyp报错:KeyError 2017的主要内容,如果未能解决你的问题,请参考以下文章
安装bcrypt报错node-gyp rebuild解决方法
widows 10 下解决在npm install python 环境报错的问题