socket.io客户端是否必须存在于全局范围内?

时间:2013-12-18 18:54:56

标签: javascript socket.io requirejs browserify

我正在使用由browserify创建的模块(比如M),它包含socket.io客户端作为依赖项。 M正在AMD应用程序中使用。在所述应用程序内部,当M向套接字客户端发出连接调用时,并且当所选传输是jsonp-polling时,尝试执行jsonp回调会抛出ReferenceError: io is undefined。这对我来说非常有意义,因为io不是全局的,而是包含在模块M中。

所以我的问题是,io 是否存在于全球范围内?有没有办法使这项工作能够在不将io添加到全局范围的情况下访问回调数组?

免责声明 - 我感谢我没有提供任何示例代码,但我很难形成一个易于实现和运行的合适的模拟示例。如果问题真的没有任何意义那么请告诉我,我会看看我是否可以把东西放在一起,但如果有人认为他们可以回答它,或者指出我正确的方向而没有看到任何代码,请做!

1 个答案:

答案 0 :(得分:3)

不,它不必在全局命名空间中,但它需要一些工作,你不能使用在github项目的根目录中找到的预构建文件。

您应该从源代码构建socketio-client项目。唯一的问题是该项目是使用component.js构建的,这是一个由伟大的TJ Hallowaychuck创建的简单客户端包管理器。您将遇到的问题是,当使用component(1)构建组件时,它会附带自己的require()函数实现,该函数使用browserify自己的实现在全局命名空间中竞争。

然而,一切都没有丢失!转变为救援......

https://github.com/eugeneware/decomponentify

使用此转换,您可以在浏览器中使用由component(1)require()构建的模块,就像任何其他启用浏览器的模块一样。阅读文档以供使用。

是的,我也等待客户端软件包管理标准化的一天。