使用 Visual Studio 2017 或 2019 编译 node-gyp C++ 插件

Posted

技术标签:

【中文标题】使用 Visual Studio 2017 或 2019 编译 node-gyp C++ 插件【英文标题】:Compile node-gyp C++ addon with Visual Studio 2017 or 2019 【发布时间】:2020-12-15 02:53:10 【问题描述】:

我正在尝试从 https://github.com/nodejs/node-addon-examples/tree/master/1_hello_world/node-addon-api

使用命令:

npm install
node ./

我正在使用 Windows 10 node.js v12.18.3 节点gyp v7.1.0

有以下变量 用户变量:

Path:
...
C:\Users\User\.windows-build-tools\python27\

系统变量:

VCINSTALLDIR
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC

VS150COMNTOOLS (is this name correct, is this variable is relevant?)
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Tools

msvs_version
2017

npm 配置详情(npm config list --json):

"msvs_version": "2017"
"msbuild_path": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\MSBuild\\15.0\\Bin\\MSBuild.exe"
"node_gyp": "C:\\Users\\User\\AppData\\Roaming\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js",
"python": "C:\\Users\\User\\.windows-build-tools\\python27\\python.exe",

我已经安装了 Visual Studio 2017 以及此处提到的所有相关 C++ 构建工具: How can I solve error gypgyp ERR!ERR! find VSfind VS msvs_version not set from command line or npm config?

但仍然收到此错误:

gyp ERR! find VS msvs_version was set from command line or npm config
gyp ERR! find VS - looking for Visual Studio version 2017
gyp ERR! find VS running in VS Command Prompt, installation path is:
gyp ERR! find VS "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional"
gyp ERR! find VS - will only use this version
gyp ERR! find VS could not use PowerShell to find Visual Studio 2017 or newer
gyp ERR! find VS looking for Visual Studio 2015
gyp ERR! find VS - found in "C:\Program Files (x86)\Microsoft Visual Studio 14.0"
gyp ERR! find VS - MSBuild in "C:\Program Files (x86)\MSBuild\14.0\bin\MSBuild.exe"
gyp ERR! find VS - msvs_version does not match this version
gyp ERR! find VS not looking for VS2013 as it is only supported up to Node.js 8
gyp ERR! find VS msvs_version does not match this VS Command Prompt or the
gyp ERR! find VS installation cannot be used.
gyp ERR! find VS
gyp ERR! find VS **************************************************************
gyp ERR! find VS You need to install the latest version of Visual Studio
gyp ERR! find VS including the "Desktop development with C++" workload.
gyp ERR! find VS For more information consult the documentation at:
gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows
gyp ERR! find VS **************************************************************
gyp ERR! find VS
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Visual Studio installation to use
gyp ERR! stack     at VisualStudioFinder.fail (C:\Users\User\AppData\Roaming\npm\node_modules\node-gyp\lib\find-visualstudio.js:121:47)
gyp ERR! stack     at C:\Users\User\AppData\Roaming\npm\node_modules\node-gyp\lib\find-visualstudio.js:74:16
gyp ERR! stack     at VisualStudioFinder.findVisualStudio2013 (C:\Users\User\AppData\Roaming\npm\node_modules\node-gyp\lib\find-visualstudio.js:351:14)
gyp ERR! stack     at C:\Users\User\AppData\Roaming\npm\node_modules\node-gyp\lib\find-visualstudio.js:70:14
gyp ERR! stack     at C:\Users\User\AppData\Roaming\npm\node_modules\node-gyp\lib\find-visualstudio.js:391:20
gyp ERR! stack     at C:\Users\User\AppData\Roaming\npm\node_modules\node-gyp\lib\util.js:54:7
gyp ERR! stack     at C:\Users\User\AppData\Roaming\npm\node_modules\node-gyp\lib\util.js:42:7
gyp ERR! stack     at ChildProcess.exithandler (child_process.js:294:7)
gyp ERR! stack     at ChildProcess.emit (events.js:315:20)
gyp ERR! stack     at maybeClose (internal/child_process.js:1021:16)
gyp ERR! System Windows_NT 10.0.18363
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Users\\User\\AppData\\Roaming\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Projects\VS\Electron\node-addon-examples-master\1_hello_world\node-addon-api
gyp ERR! node -v v12.18.3
gyp ERR! node-gyp -v v7.1.0
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! hello_world@0.0.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the hello_world@0.0.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

当我尝试更改上述所有参数以使用安装了所有 VS2015 构建工具的 VS2015 时,它可以正常工作。

如何修复上述错误以使用 Visual Studio 2017 或 2019?

【问题讨论】:

【参考方案1】:

从日志中,我相信您遇到了 node-gyp 和 VS Build Tools 之间的版本冲突。

您的 node.js v12.18.3 和 node-gyp v7.1.0 看起来不错。

我还从实践中观察到 node-gyp v7.1.0 与 VS2019 构建工具配合使用效果最好。

只需确保您的 node-gyp 已全局安装

$ npm install -g node-gyp

并且您还安装了 Python,至少安装了 v2.7、v3.5、v3.6、v3.7 或 v3.8 之一。

如果您安装了多个 Python 版本,您可以通过使用以下命令设置您的 npm 配置来确定 node-gyp 应该使用哪个 Python 版本:

$ npm config set python /path/to/executable/python

如果您还没有安装 VS2019 构建工具,我还建议您直接访问 Microsoft's Download Page 以下载并安装 VS2019 构建工具,这是最近更新的。

假设您已经安装了 VS2019 构建工具和其他版本的构建工具,即 VS2017、VS2015。我建议打开 Visual Studio 卸载程序,我建议卸载所有其他版本的 VS 构建工具,除了 VS2019 构建工具,它应该与您的全球安装的 node-gyp 包的最新版本兼容。

更新您的 VS2019 构建工具,目前已推出新的更新。

还要确保在 bindings.gyp 配置文件中将“


...,
 "include_dirs": [
    "<!@(node -p \"require('node-addon-api').include\")"
 ],
...

我希望这至少会有所帮助!

【讨论】:

【参考方案2】:

尝试在您正在触发构建的命令窗口中设置此环境,它将 VS2017 映射到 15。

SET VS140COMNTOOLS=%VS150COMNTOOLS%

【讨论】:

以上是关于使用 Visual Studio 2017 或 2019 编译 node-gyp C++ 插件的主要内容,如果未能解决你的问题,请参考以下文章

安装visual studio2017时老出问题

Visual Studio 2017 密钥

SSRS - Visual Studio 2017

visual studio 2017许可证过期怎么办

使用 Visual Studio 2017 或 2019 编译 node-gyp C++ 插件

如何在 Microsoft Visual Studio 2017 或 2019 中启用或使用自动矢量化以及自动并行化?