NPM - 无法安装socket.IO

时间:2013-05-09 18:56:38

标签: node.js socket.io npm

我正在尝试使用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) fail with error MSB8020 on Windows 7相同 但是当我在答案中使用该选项而不是错误时,它告诉我一些可能的数据丢失(c4267),但不记录任何错误。

然后当我启动我的应用程序时,它告诉我无法找到模块socket.io 这会是什么来的?

哦,当我做npm config root root它告诉我“undefined”它可能与它有什么关系吗? 我应该全局还是本地安装模块?

6 个答案:

答案 0 :(得分:35)

Socket.IO的依赖关系树中至少有一个包是C/C++ addons,需要在系统安装时进行编译。并且,因为它是一个依赖项,如果它没有成功安装,Socket.IO也不会。

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

npm install -g node-gyp

还有its dependencies installed。简要版本:

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

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

npm install socket.io

答案 1 :(得分:15)

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

我做了:

npm install socket.io @“~0.8.1”

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

然后Socket.io完美安装。

答案 2 :(得分:7)

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

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

示例:

  • 为Visual Studio 2012设置GYP_MSVS_VERSION=2012
  • 设置GYP_MSVS_VERSION=2013e(' e'代表' express edition')

有关完整列表,请参阅   - 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安装的一部分发布,这样我们就可以永久修复这个问题。

随时添加您的投票:

答案 3 :(得分:0)

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

  • cd to node_modules / socket.io / node_modules / engine.io / node_modules / ws
  • 编辑package.json以将nan的发布从1.4.x更改为1.6.0
  • 问题命令 node-gyp rebuild

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

答案 4 :(得分: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 Update,安装所有重要更新,重新启动计算机

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

安装日志中没有错误。

注意:此解决方案可能对您无效,但对我而言

答案 5 :(得分:0)

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

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

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

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