只安装Visual Studio 2013,如何进行NPM本地构建?

11

我安装了干净的Windows操作系统,并安装了Visual Studio 2013专业版,还有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(平台工具集=“v110”)的生成工具。要使用v110生成工具进行构建,请安装Visual Studio 2012生成工具。 或者,您可以通过选择项目菜单或右键单击解决方案,然后选择“升级解决方案...”来升级到当前的Visual Studio工具。[C:\Users\Aaron\AppData\Roaming\npm\node_modules\pg\build\binding.vcxproj]

我似乎找不到描述的Visual Studio 2012生成工具,并且肯定不想为此需求安装VS2012。是否有一种方法可以强制安装和构建使用可用的2013编译器/工具,而不更改软件包的代码?

我在我的Googlefu中没有找到任何人描述这个具体问题和解决方案。


3
在npm中,您可以使用“--msvs_version=2012”(例如)提供其他版本。我不认为有一个官方的2013开关。 - Yablargo
这看起来像是这里的标志列表?http://code.google.com/p/gyp/source/browse/trunk/pylib/gyp/MSVSVersion.py?r=1725 - Yablargo
1
更好的是,你也可以全局设置版本,例如: npm config set msvs_version 2012 --global - Erik Vullings
2
@ErikVullings - 所以,npm config set msvs_version 2013 --global?(因为问题是关于使用VS 2013) - WiredPrairie
5个回答

17

我安装了Windows 8.1 (64位) Pro和Visual Studio 2013,没有之前的VS版本,尽管一些组件随SQL Server 2014一起安装。执行npm install命令失败,并出现类似的错误。

因此我尝试指定VS版本。

npm install --msvs_version=2013 <package>

使用平台工具集“v120”启动正确,但是构建失败,出现以下错误(注意在目标路径中使用的V110):

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Platform.targets(44,5): error MSB8020: v120(平台工具集=“v120”)的生成工具无法找到。 若要使用v120生成工具构建,请单击“项目”菜单或右键单击解决方案,然后选择“更新VC++项目...”。 安装v120以使用v120生成工具。

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

为了修正用于目标的路径,我必须设置环境变量如下:

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

然后软件包被安装了。

版本参考:
VS 2013 高级版
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' }


谢谢,前两步解决了我的问题。 - Jonathan
在干净安装了VS 2013之后,我在MSBuild/Microsoft.Cpp中根本没有任何文件夹! - IanWatson
尝试了一整天才让它正常工作。希望这些神奇的环境变量能以某种方式被记录下来。你是个传奇! - Sam

10

帮助我的方法是指定环境变量GYP_MSVS_VERSION以使用正确的VS
在运行npm之前,您可以在控制中心或控制台中设置它,所以对于2013年来说,它是

set GYP_MSVS_VERSION=2013

而对于2015年,您应该使用

set GYP_MSVS_VERSION=2015

对于免费的VS 2013或2015社区版,这应该是最简单的方法。

附言
我相信对于VS 2013 Express,您应该使用

set GYP_MSVS_VERSION=2013e

其中e告诉npm使用express版本。


太棒了!我一直在解决这个问题,但从未找到解决方案。我安装了VS 2015企业版,并使用以下命令(不带引号)“set GYP_MSVS_VERSION=2015”解决了我的问题! - Steve Johnson

3

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

注意你还需要更新node内部使用的node-gyp

现在,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。但是默认的Toolset设置是'v120',它需要安装8.1 SDK(需要额外安装)。

要使用标准的VS 2013构建,您需要更改所选的工具集。您可以通过修改~/.node-gyp/common.gypi文件(从这里获得的想法),并将工具集更改为'v120_xp'(使用捆绑的7.1A SDK)来实现:

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

是的-现在本地npm模块将与标准Visual Studio 2013安装一起编译!


3
npm config set msvs_version 2013 --global

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\

问题已解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接