在运行需要重新构建node-gyp的npm install
时,抛出了以下构建错误:
系统信息MSB8020: v120的构建工具(平台工具集= 'v120')不能被发现。要使用v120构建工具进行构建,请安装v120构建工具。或者,您可以升级到当前的VisualStudio工具通过选择Project菜单或右键单击,然后选择"重新定位解决方案"
- Windows 10 (x64)
- Visual Studio 2015
- 节点v0.12.7
- npm v2.11.3
- node-gyp v2.0.1
br
使用msvs_version参数:npm install --msvs_version=2015
如果msvs_version参数不工作怎么办?
如果msvs_version参数不起作用,可能是因为您没有安装Visual c++ 2015构建环境。
安装Visual c++ Build Environment
选项1:Visual Studio 2015
- 在VS2015安装过程中,选择"Custom"。或者,如果你已经安装了VS2015,进入Windows的"卸载或更改程序">从列表中选择VS2015>单击"更改">单击"修改"
- 在"编程语言">"Visual c++"下勾选"Visual c++ 2015通用工具"选项 完成VS2015安装
选项2:Visual c++ Build Tools 2015
作为VS2015的替代品,您可以安装Microsoft发布的Visual c++ Build Tools 2015:
- vc++安装时,选择"Custom"
- 检查"Windows 8.1 SDK"one_answers"Windows 10 SDK"选项 完成vc++安装
使用msvs_version
现在已经安装了Visual c++ 2015构建环境,你可以通过msvs_version参数告诉npm使用它:
- 开放PowerShell
- 使用msvs_version参数:
npm install --msvs_version=2015
配置选项(非必需)
可选地,除了在命令提示符中指定msvs_version,你可以通过将msvs_version参数添加到npmrc或package.json中来配置npm,使其始终包含msvs_version参数:
npmrc
打开PowerShell并运行npm config set msvs_version 2015
,它将把这个参数添加到您的用户npmrc文件中。从此以后,每次作为该用户运行npm install
时,将自动包含msvs_version=2015
参数
可选地,如果你计划用不同的Windows帐户登录,你可以包括全局标志
npm config set msvs_version 2015 --global
,并且你希望这个设置适用于机器上的所有帐户
package.json
修改项目的包。Json文件包含:
"config": {
"msvs_version": 2015
}
从此以后,每次运行npm install
时,对于这个项目,msvs_version=2015
参数将自动包含
文章修订
- 受Chuck关于v120工具集的评论启发,进一步调查后修改的步骤(感谢@ChuckWalbourn)
- 新增配置选项
- 新增vc++ Build Tools选项
- vc++ Build Tools官方发布链接
我想在2Toad的回答中添加评论,但是stackoverflow不允许我这样做。您可以使用以下命令全局设置msvs_version:
npm config set msvs_version 2015 --global
我将分享这个答案,因为其他修复都没有解决我的问题。我有同样的错误,但设置了msvs参数:
npm install --msvs_version=2015
不能解决问题。无论我做什么,我都能看到它在工具集的错误位置。
长话短说,我了解到MSBuild现在打包在Visual Studio中,而不再打包在。net中。果然,我在PATH变量中有了这个条目:
C:WindowsMicrosoft.NETFrameworkv4.0.30319;
,因此调用了错误(旧)版本的MSBuild。我删除了这个条目,并添加了以下与VS2015相关的路径:
C:Program Files (x86)MSBuild14.0Bin
解决问题。
我已经花了2天时间安装了所有的VS版本…
npm install oracledb --msvs_version=2015
返回所有错误:
[..]node-gyp6.9.1includenodev8.h(18): fatal error C1083[..]
使用npm install oracledb --msvs_version=2013
返回大量警告,编译后不能正常工作。
[..]warning C4995: 'v8::Value::ToUint32'[..]
这是我使用npm模块时最糟糕的经历。真是浪费时间:/
将版本设置为2015对我没有帮助。尝试将其设置为2013:
npm config set msvs_version 2013
或
npm config set msvs_version 2015