我正在尝试使用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”它可能与它有什么关系吗? 我应该全局还是本地安装模块?
答案 0 :(得分:35)
Socket.IO的依赖关系树中至少有一个包是C/C++ addons,需要在系统安装时进行编译。并且,因为它是一个依赖项,如果它没有成功安装,Socket.IO也不会。
要启用跨系统编译,Node.js使用node-gyp
作为其构建系统。您需要将其安装为全局包:
npm install -g node-gyp
还有its dependencies installed。简要版本:
然后,您应该可以将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
属性。
示例:
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。要在构建失败后解决问题:
您现在应该可以使用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)。