18

我正在尝试使用 npm 在 Windows 上安装 socket.io,以便在 nodeJS 服务器上使用。

首先,当我输入“npm install socket.IO”时,我在日志中有一个错误,说明了有关 python 和 node-gyp 的内容。我安装了 python 2.7.3 并设置了环境变量。

现在我遇到了一个新错误,它与 Visual Studio 有关(VS 到底与 npm 有什么关系?是关于编译器的吗?)。

该错误与此处npm install for some packages (sqlite3, socket.io) failed with error MSB8020 on Windows 7 相同 但是当我在答案中使用该选项而不是错误时,它告诉我一些可能的数据丢失 (c4267 ) 但不记录任何错误。

然后当我启动我的应用程序时,它告诉我仍然找不到模块 socket.io 这可能来自什么?

哦,当我执行 npm config get root 时,它告诉我“未定义”可能与它有什么关系吗?我应该在全局还是本地安装模块?

4

6 回答 6

35

Socket.IO 的依赖树中至少有一个包是C/C++ 插件,需要在安装时在您的系统上进行编译。而且,由于它是一个依赖项,如果它没有成功安装,Socket.IO 也不会。

为了启用跨系统编译,Node.jsnode-gyp用作其构建系统。您需要将其作为全局包安装:

npm install -g node-gyp

以及安装它的依赖项。删节版:

  • 蟒蛇2
  • C/C++ 编译器/构建工具
    • 对于 Windows,Microsoft Visual Studio 2013(C++ 或 Windows 桌面)(快捷版)
      • 对于 64 位,可能需要 Windows 7 64 位 SDK

然后,您应该能够将 Socket.IO 作为本地包安装,这样您就可以require

npm install socket.io
于 2013-05-09T19:04:43.443 回答
15

我在 Mac 上遇到了类似的问题。解决我的问题的是安装稍旧版本的 Socket.io。

我做了:

npm install socket.io@"~0.8.1"

它将安装 0.8.0 到 0.8.9 之间的最新版本,但不会安装 0.9.0 或更高版本。

Socket.io 然后完美安装。

于 2013-10-18T20:28:34.207 回答
7

确保您拥有运行所需的所有软件node-gyp

您可以gyp通过环境变量配置所使用的 Visual Studio 版本,这样您就可以避免设置--msvs_version=2012属性。

例子:

  • GYP_MSVS_VERSION=2012为 Visual Studio 2012设置
  • 设置GYP_MSVS_VERSION=2013e(“e”代表“特快版”)

有关完整列表,请参阅 - https://github.com/joyent/node/blob/v0.10.29/tools/gyp/pylib/gyp/MSVSVersion.py#L209-294

这对于 NodeJS 的 Windows 用户来说仍然很痛苦,因为它假定您安装了 Visual Studio 的副本,而许多最终用户永远不会拥有它。因此,我正在游说 Joyent 鼓励他们将 Web 套接字作为 CORE 节点的一部分,并可能将 GNU gcc 编译器作为 NodeJS 安装的一部分,这样我们就可以永久解决这个问题。

欢迎在以下位置添加您的投票:

于 2014-08-01T00:38:01.600 回答
0

这个问题让我很困扰。。我尝试了很多解决方案。

我安装了 .NET Framework 2.0 SDK。

我安装了 Python 2.7.x

我安装了 VS 2012 Express

我设置了一些路径

我执行npm install xxx了论点--msvs_version=2010(or 2012/2013..)...

但都失败了。

最后,我卸载了 Python & .NET Framework 2.0 SDK & VS 2012,清除这些路径,启用 Windows 更新,安装所有必要的更新,重启我的电脑

然后执行以下命令: npm install node-gyp -g npm install socket.io -g npm install browser-sync -g

安装日志中没有错误。

注意:此解决方案可能不适合您,但适合我

于 2015-04-26T15:23:38.400 回答
0

导致编译失败的问题是socket.io需要的engine.io模块安装的ws模块拉入了nan的后级版本。有关详细信息,请参阅https://github.com/BrowserSync/grunt-browser-sync/issues/95。要在构建失败后解决该问题:

  • cd 到 node_modules/socket.io/node_modules/engine.io/node_modules/ws
  • 编辑 package.json 以将 nan 的版本从 1.4.x 更改为 1.6.0
  • 发出命令node-gyp 重建

您现在应该可以使用 socket.io

于 2015-03-18T11:21:39.363 回答
0

另一种方法是使用Docker for Windows并启动 NodeJS 环境。在开发过程中,您可以将 Node 代码挂载为 Docker 卷,然后继续从 Windows 更新您的代码,但执行它并将其依赖项安装在 Linux VM 中。部署时,您可能更喜欢使用 Dockerfile,它将您的节点代码复制到您的 Docker 映像中,然后将其烘焙到您部署的发布映像中。

如果您不想冒险更改代码的 socket.io 版本或其依赖项,则可能需要这种方法。

如果您计划部署到企业 Intranet 或公共/私有云,它也可能是一个有价值的解决方案。

Docker 还可以非常方便地在不同版本的 Node 下测试部署,而不会干扰 Windows 计算机的开发环境(例如,用于测试 NodeJS 库)。

于 2015-07-14T01:18:25.290 回答