npm安装某些包(sqlite3,socket.io)失败,错误MSB8020在Windows 7上

当试图安装一些node.js包(特别是sqlite3和socket.io)时,使用npm install socket.io在Windows 7机器上使用Visual Studio 2012(而不是2010),我有一些失败,看起来像这样:

C:\ Program Files(x86)\ MSBuild \ Microsoft.Cpp \ v4.0 \ V110 \ Microsoft.Cpp.Platform.targets(35,5):错误MSB8020:为Visual Studio 2010构build工具(Platform Toolset ='v100 ')找不到。 要使用v100构build工具构build,请单击“项目”菜单或右键单击解决scheme,然后select“更新VC ++项目…”。 安装Visual Studio 2010以使用Visual Studio 2010构build工具进行构build。

为了解决这个在我的机器上,我做了这个命令来安装包:

npm install socket.io --msvs_version=2012

当遇到安装sqlite3的问题时,我在这里find了答案,它也适用于socket.io。

这些可能是解决问题的更持久的解决scheme:

  1. 安装Visual Studio 2010
  2. 将npm内部副本更新为更新版本的node-gyp,如下所述(可能是更好的select,虽然我没有得到它的工作,但没有尝试太久)

另一种select是更改configuration,而不是每次指定msvs_version:

 npm config set msvs_version 2012 

我安装了Visual Studio Express 2013和Visual Studio Community 2015。

我得到C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB8020: The build tools for v140 (Platform Toolset = 'v140') cannot be found. To build using the v140 build tools, please install v140 build tools. Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-click the solution, and then selecting "Upgrade Solution...". [G:\work\cinema\node_modules\engine.io\node_modules\bufferutil\build\bufferutil.vcxproj] C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB8020: The build tools for v140 (Platform Toolset = 'v140') cannot be found. To build using the v140 build tools, please install v140 build tools. Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-click the solution, and then selecting "Upgrade Solution...". [G:\work\cinema\node_modules\engine.io\node_modules\bufferutil\build\bufferutil.vcxproj]

原因是从https://nodejs.org下载的最新的Windows版Node.js包含一个旧的;npm v2(和npm v2版本中的旧node-gyp npm )。

我不得不更新Node.js的内部npm (也更新了node-gyp ):

 (open console as an administrator) cd "C:\Program Files\nodejs" npm install npm@latest npm config set msvs_version 2013 

现在,它的工作(似乎暂时使用VS 2013)

TL; DR

如果你不想让node-gyp依赖你安装的Visual Studio版本(或者没有安装VS),请安装windows-build-tools (见下文)。 这将消除这两个错误,并应避免升级安装的Visual Studio版本时将来的问题。

如果你想让node-gyp依赖于你安装的Visual Studio版本,那么npm config set msvs_version 2015 ,用你的版本标签代替2015 。 有效的版本标签是: 2015


修复使用windows-build-tools

根据节点gyp安装说明 ,您也可以这样做

npm install --global --production windows-build-toolsELEVATED命令shell中npm install --global --production windows-build-tools

这将严格安装node-gyp msvs_version所需的Microsoft Visual C ++ Build Tools(这将用于代替Visual Studio进行编译),并将msvs_version适当地设置为刚刚安装的版本。

安装之后,你应该检查由windows-build-tools设置的msvs_version没有被覆盖。 当执行npm config listmsvs_version应该出现在; globalconfig C:\Users\Username\AppData\Roaming\npm\etc\npmrc ; globalconfig C:\Users\Username\AppData\Roaming\npm\etc\npmrc ; 如果没有, windows-build-tools设置的值已被覆盖,被覆盖的值应该被删除。 npm config delete msvs_version应该删除重写的值, npm config delete msvs_version工具设置的值应该出现在全局configuration部分下。