仅安装了Visual Studio 2013的NPM本机构建

时间:2013-11-18 15:20:22

标签: visual-studio-2013 npm

我安装了Visual Studio 2013 Pro的Windows安装,以及当前版本的Python,node和npm。

我正在尝试安装pg npm包,但它需要本机构建并且失败:

  

C:\ Program Files(x86)\ MSBuild \ Microsoft.Cpp \ v4.0 \ V120 \ Microsoft.Cpp.Platform.targets(64,5):   错误MSB8020:Visual Studio 2012的构建工具(平台   无法找到Toolset ='v110')。使用v110构建进行构建   工具,请安装Visual Studio 2012构建工具。或者,   您可以通过选择以升级到当前的Visual Studio工具   项目菜单或权利    - 单击解决方案,然后选择“升级解决方案...”。   [C:\用户\亚伦\应用程序数据\漫游\ NPM \ node_modules \ PG \建立\ binding.vcxproj]

我似乎无法找到所描述的Visual Studio 2012的构建工具,我当然更愿意不需要为此需要安装VS2012。有没有办法强制安装和构建使用可用的2013编译器/工具,而无需更改包的代码?

我找不到任何描述此特定问题的人和使用我的Googlefu的解决方案。

5 个答案:

答案 0 :(得分:17)

我的Windows 8.1(64位)专业版只安装了Visual Studio 2013(没有以前版本的VS,尽管SQL Server 2014附带了一些组件)。 npm install命令失败并出现类似错误。

所以我试着指定VS版

npm install --msvs_version=2013 <package>

它使用Platform Toolset'v120'正确启动,但构建失败并出现以下错误(请注意目标路径中使用的V110):

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Platform.targets(44,5): error MSB8020: The builds tools for v120 (Platform Toolset = 'v120') cannot be found. To build using the v120 build tools, either click the Project menu or right-click the solution, and then select "Update VC++ Projects...". Install v120 to build using the v120 build tools.

我转到路径c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\,发现有两个子文件夹:V110V120

要纠正用于目标的路径,我必须像这样设置环境变量:

set VCTargetsPath=C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120

然后安装了包。

供参考,版本:
VS 2013 Premium
Python 2.7.8
C:\Windows\system32>npm version { http_parser: '1.0', node: '0.10.29', v8: '3.14.5.9', ares: '1.9.0-DEV', uv: '0.10.27', zlib: '1.2.3', modules: '11', openssl: '1.0.1h', npm: '1.4.14' }

答案 1 :(得分:10)

帮助我的是指定环境变量 GYP_MSVS_VERSION 以使用正确的对象 您可以在运行npm之前在控制中心或控制台中进行设置,因此对于2013年它是

set GYP_MSVS_VERSION=2013

并且2015年使用

set GYP_MSVS_VERSION=2015

使用免费的VS 2013或2015社区版本应该是最简单的方法。

PS
我相信VS 2013 Express应该使用

set GYP_MSVS_VERSION=2013e

其中 e 告诉npm使用快速版

答案 2 :(得分:3)

node-gyp更新为最新版本(1.0.2):npm install node-gyp -g

请注意,您还必须update the node-gyp that is internally used by node

现在,node-gyp将支持您的Visual Studio 2013 - 您可以使用<npm-cache>/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py方法检入_CreateVersion

然而,本机模块仍然无法构建,会出现一些包含文件丢失的错误(来自Windows SDK的文件,比如说winsock2.h)。这是因为Visual Studio 2013与7.1A SDK捆绑在一起作为默认值。但默认的工具集设置是&#39; v120&#39;,它需要8.1 SDK(需要另外安装)。

要使用VS 2013的库存进行构建,您需要更改正在选择的工具集。您可以修改~/.node-gyp/common.gypi文件(从here获取的想法),并将工具集更改为&#39; v120_xp&#39;相反(将使用捆绑的7.1A SDK):

{ ... 'target_defaults': { ... 'configurations': { ... 'Release': { 'conditions': [ ['target_arch=="x64"', { 'msvs_configuration_platform': 'x64', 'msbuild_toolset': 'v120_xp' <--- THIS LINE! }], } } } }

Voila - 现在本机npm模块将使用Visual Studio 2013安装库存进行编译!

答案 3 :(得分:3)

npm config set msvs_version 2013 --global

答案 4 :(得分:0)

我与VS2015有类似的错误,但设置了msvs参数:

npm install --msvs_version=2015

没有解决问题。无论我做了什么,我都能看到它正在寻找工具集的错误位置。

长话短说我了解到MSBuild现在已与Visual Studio打包在一起,不再与.NET打包在一起。果然我在PATH变量中有这个条目:

C:\Windows\Microsoft.NET\Framework\v4.0.30319;

因此调用了错误的(旧的)MSBuild版本。我删除了这个条目并添加了以下与VS2015相关的路径:

C:\Program Files (x86)\MSBuild\14.0\Bin\

问题解决了。