解决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。我的机器同时安装了两个版本。

macOS 安装 node-gyp 并遇到错误的情况通常是由于几个常见原因造成的: ### 报错情况概述 当你尝试通过 `npm install -g node-gyp` 来全局安装 node-gyp 到你的 macOS 系统上时,可能会遇到各种错误信息。这可能是由多种因素引起的,包括但不限于依赖库缺失、环境配置问题或者是网络问题。 ### 解决方案步骤 #### 1. 更新 Node.js 和 npm 首先检查并更新到最新的 Node.js 版本,因为某些错误可能在新版本中已被修复。你可以通过命令行运行以下脚本来升级: ```bash sudo npm install -g n n stable ``` #### 2. 重新安装 node-gyp 如果更新了 Node.js 还无法解决安装问题,可以尝试直接卸载当前的 Node.js 和重新安装: ```bash sudo rm -rf /usr/local/n sudo rm -rf ~/.npm-global npm uninstall -g node-gyp ``` 然后从官方仓库下载最新版的 Node.js: ```bash wget https://nodejs.org/dist/latest/node-vXX.XX.X.tar.gz tar xzvf node-vXX.XX.X.tar.gz cd node-vXX.XX.X/ ./configure make sudo make install ``` 最后,重新安装 node-gyp: ```bash npm install -g node-gyp ``` #### 3. 检查系统权限和依赖项 有时候安装失败可能是由于缺少特定的编译工具,如 GCC(GNU Compiler Collection)。确保已安装最新版本的 GCC,并尝试再次安装 node-gyp: ```bash brew update brew upgrade gcc brew install pkg-config libffi ``` 或者对于非 Homebrew 用户,直接从网站下载并安装 GCC。 #### 4. 清理 Node 缓存 清理 npm 的缓存文件有时也能帮助解决问题: ```bash npm cache clean --force ``` #### 相关问题: 1. **如何检查 Node.js 和 npm 是否已经正确安装并且版本是最新的?** - 使用 `node -v` 查看 Node.js 版本。 - 使用 `npm -v` 查看 npm 版本。 2. **在 Windows 上安装 node-gyp 遇到的问题有哪些不同点?** - Windows 下安装可能需要额外的依赖包,如 MSYS2 和 MinGW-w64 或者 Cygwin 环境,以便能够提供 C++ 编译所需的功能。 3. **在安装过程中遇到了错误消息“Missing SDK”、“Not a directory”,该如何处理?** - 这些错误通常意味着缺少必要的操作系统开发工具集。对于 macOS,确保你有足够的权限访问系统的开发者工具;对于其他平台,则可能需要安装对应的编译器套件和相关 SDK。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值