我目前正在开发一个应该在更大的应用程序中使用的npm模块。我的模块需要收听一些socket.io事件,而且我不确定如何包含 socket.io
我可以看到两种解决方案:
我在我的模块中包含socket.io,并配置我的所有事件监听。然后我导出它,以便主应用将附加到其服务器
或者,我让服务器配置所有内容,让它在调用我的模块时传递 socket.io模块,并配置我的事件监听应用程序给出的事件。 / p>
第一个解决方案的优点是不强制主应用程序在他们的依赖项中包含socket.io,如果他们不需要的话。
第二个解决方案强制主应用程序在其依赖项中包含socket.io,但似乎是此方法的最佳解决方案。
您如何看待这个?我应该在我的模块中包含socket.io,只需让主应用程序将它附加到服务器,或者我应该让主应用程序让我访问它的socket.io模块?
答案 0 :(得分:0)
我认为执行此操作的常用方法是让调用模块的人注入服务器对象。所以你的模块调用如下:
require('myapp')(server);
然后,在您的应用中,您可以将socket.io附加到服务器。
var io = require('socket.io')(server);
此外,您可以使用可选的options参数,您可以直接将其传递给socket.io。
require('myapp')(server,options);
这有几个优点。 0配置,不要求用户要求socket.io,易于测试,如果需要可以进行配置。