某些软件包(sqlite3、socket.io)的 npm install 在 Windows 7 上失败并出现错误 MSB8020

Posted

技术标签:

【中文标题】某些软件包(sqlite3、socket.io)的 npm install 在 Windows 7 上失败并出现错误 MSB8020【英文标题】:npm install for some packages (sqlite3, socket.io) fail with error MSB8020 on Windows 7 【发布时间】:2012-12-20 05:47:49 【问题描述】:

当我尝试在装有 Visual Studio 2012(而不是 2010)的 Windows 7 机器上使用 npm install socket.io 安装一些 node.js 包(尤其是 sqlite3 和 socket.io)时,我遇到了一些看起来像这样的故障:

C:\程序文件 (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Platform.targets(35,5): 错误 MSB8020:Visual Studio 2010 的构建工具(平台 工具集 = 'v100') 找不到。使用 v100 构建 工具,单击项目菜单或右键单击解决方案,然后 然后选择“更新 VC++ 项目...”。将 Visual Studio 2010 安装到 使用 Visual Studio 2010 构建工具构建。

【问题讨论】:

【参考方案1】:

为了在我的机器上解决这个问题,我执行了以下命令来安装包:

npm install socket.io --msvs_version=2012

我在安装 sqlite3 时遇到问题时找到了答案here,它也适用于 socket.io。

这些可能是解决问题的更永久的解决方案:

    安装 Visual Studio 2010 如here 和here 所述,将 npm 内部副本更新到较新版本的 node-gyp(可能是更好的选择,虽然我没有让它工作但没有尝试太久)

【讨论】:

是的,这对我有用,虽然我还必须更新内部 node-gyp,这也适用于 mongojs 和使用 vs2012 时的许多其他问题。 谢谢。我浪费了好几个小时试图找出问题所在。 也与 VS 2015 一起使用:npm install socket.io --msvs_version=2015 在安装sqlite3 时也为我工作。干杯!【参考方案2】:

另一种选择是更改配置,而不是每次都指定 msvs_version:

npm config set msvs_version 2012

【讨论】:

谢谢!我回到这里看看是否有人会这么说。我厌倦了每次都添加开关。 当我尝试在 VS2013 中安装 contextify 时,这对我有用。 我已经安装了 VS 2013,所以我使用了这个:npm config set msvs_version 2013【参考方案3】:

我同时安装了 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]

原因是从 https://nodejs.org 下载的最新 Windows 版 Node.js 包含旧的 npm v2(以及旧的 node-gypnpm v2 中)。

我不得不更新 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)

【讨论】:

npm config set msvs_version 2015 工作!早年版本没有。 我安装了 VS 2015 和 Node.js 5.1.1。设置npm config set msvs_version 2015 并没有解决我的问题。我的解决方法是为 npm install 找不到的路径创建符号链接(npm 错误 MSB4019:导入的项目“C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.未找到 Default.props”)。打开命令提示符并输入cd C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0,然后输入mklink /d V110 V140【参考方案4】:

TL;DR

如果您希望 node-gyp 依赖于您安装的 Visual Studio 版本(或未安装 VS),请安装 windows-build-tools(见下文)。这将消除错误,并且在升级已安装的 Visual Studio 版本时应避免将来出现问题。

如果您确实希望node-gyp 依赖于您安装的Visual Studio 版本,那么npm config set msvs_version 2015,用您的版本标记代替2015。有效版本标签为:2015,2014,2013,110,100


使用windows-build-tools 修复

根据node-gyp installation instructions,你也可以这样做

npm install --global --production windows-build-tools 来自 ELEVATED 命令外壳

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

安装后,你应该检查windows-build-tools设置的msvs_version没有被覆盖。执行npm config list时,msvs_version应该出现在; globalconfig C:\Users\Username\AppData\Roaming\npm\etc\npmrc下面;如果不是,则windows-build-tools 设置的值已被覆盖,应删除覆盖的值。 npm config delete msvs_version 应该删除覆盖的值,构建工具设置的值应该出现在全局配置部分下。

【讨论】:

以上是关于某些软件包(sqlite3、socket.io)的 npm install 在 Windows 7 上失败并出现错误 MSB8020的主要内容,如果未能解决你的问题,请参考以下文章

socket.io

Socket.io 客户端切换到 xhr-polling 时出错

Socket.io - 分享“好友活动”设计模式

如何实现socket.io的生存时间

无法从带有 Socket.IO 的 cookie 中获取 Express 会话 ID

处理 socket.io 客户端的 PHP/C++ 服务器