解决node-gyp报错:KeyError 2017

转载:https://blog.csdn.net/caoshiying/article/details/79564092

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]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

从代码逻辑可以看出,它支持两个环境变量: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
  • 1
  • 2
  • 3

问题就解决了。 
最后提示:请确认当前机器安装了Visual Studio 2015。我的机器同时安装了两个版本。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 当您在使用 npm install 安装 Node.js 模块时,如果出现 node-gyp 报错,通常是由于缺少构建工具或缺少 Python 等问题引起的。以下是一些可能的解决方案: 1. 安装构建工具 node-gyp 需要一些构建工具来编译原生模块。您可以使用以下命令安装所需的构建工具: - 对于 Windows 平台,请安装 windows-build-tools: ``` npm install --global windows-build-tools ``` - 对于 macOS 平台,请使用以下命令安装 Xcode 命令行工具: ``` xcode-select --install ``` - 对于 Linux 平台,请使用以下命令安装所需的依赖项: ``` sudo apt-get install python3-dev python3-pip python3-setuptools sudo apt-get install build-essential ``` 2. 检查 Python 版本 node-gyp 要求使用 Python 2.x 或 Python 3.x 版本。请确保已安装适当版本的 Python,并且已将其添加到系统路径中。您可以使用以下命令检查 Python 版本: ``` python --version ``` 3. 清除 npm 缓存 有时,npm 缓存可能会导致问题。您可以使用以下命令清除 npm 缓存: ``` npm cache clean --force ``` 如果上述解决方案都无法解决问题,您可以查看 node-gyp 的文档,了解更多信息。 ### 回答2: 在使用npm install安装一个Node.js包时,有时候会遇到node-gyp报错node-gyp是一个Node.js的工具包,它可以编译和构建一些需要C++源码的Node.js模块。如果在使用npm install安装某个Node.js模块时提示node-gyp报错,很有可能是因为电脑上的node-gyp不是最新版本或者在安装node-gyp的过程中出现了问题。 为了解决这个问题,可以尝试以下几个解决方案: 1. 更新node-gyp: 打开cmd或终端,输入以下命令来更新node-gyp: ``` npm install -g node-gyp ``` 2. 安装Python 2.x: node-gyp需要在安装时编译C++源码,因此需要安装一个C++编译器和Python 2.x作为中间件。如果电脑上没有安装Python 2.x,则可以从Python官网下载并安装。 3. 安装Visual C++ Build Tools: 安装Visual C++ Build Tools也是编译和构建Node.js模块所需的。可以到Microsoft官网下载Visual C++ Build Tools然后进行安装。 4. 检查环境变量: 有时候node-gyp报错是因为环境变量没有设置正确。检查电脑上的环境变量是否已将Python和Visual C++ Build Tools添加到了路径之中。如果没有添加,则可以手动将路径添加到环境变量。 综上所述,如果在使用npm install安装Node.js模块时遇到了node-gyp报错,可以尝试更新node-gyp、安装Python 2.x或Visual C++ Build Tools、检查环境变量等方法来解决问题。 ### 回答3: npm install 后 node-gyp 报错的原因可能有很多。Node-gyp 是一个 Node.js 插件,用于编译和构建 Node.js C++ 扩展模块,通常用于一些需要访问操作系统底层的 Node.js 模块。如果 Node-gyp 报错了,那么可能是在编译或构建这些模块时出现了一些问题或错误。 有一些常见的情况会导致 Node-gyp 报错,例如: 1. 缺少构建工具:Node-gyp 必须在本地安装有 Python、make 和 C++ 编译器才能正常工作。如果这些工具没有安装或版本不正确,Node-gyp 就会报错。 2. 缺失相关依赖:有些 Node.js 模块需要一些操作系统相关的库才能正常编译和运行,如果这些库没有安装或版本不正确,Node-gyp 就会报错。 3. 网络访问问题:Node-gyp 在编译和构建模块时需要访问互联网下载一些依赖库,如果网络访问出现问题就会导致 Node-gyp 报错。 如果遇到 Node-gyp 报错的情况,可以尝试以下几种解决方法: 1. 确认本地的 Python、make 和 C++ 编译器都已正确安装,并且版本符合要求。 2. 根据错误提示信息,尝试安装缺失的系统库或相关依赖模块。 3. 配置正确的网络代理或翻墙软件,以确保 Node-gyp 可以顺利访问互联网。 4. 尝试手动编译和构建需要的模块,查看具体报错信息并进行相应的处理。 总之,Node-gyp 报错可能是由多种原因造成的,需要根据具体情况进行调试和处理。在解决问题的过程中,可以参考 Node-gyp 的官方文档和相关社区资源,进行更深入的学习和研究。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值