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

标签 javascript socket.io requirejs browserify

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

所以我的问题是,io 必须存在于全局范围内吗?有没有一种方法可以实现此目的,无需将 io 添加到全局范围即可访问回调数组?

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

最佳答案

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

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

然而,一切并没有失去!转变为救援...

https://github.com/eugeneware/decomponentify

使用此转换,您可以像任何其他启用 browserify 的模块一样在 browserify 中使用由 component(1)require() 构建的模块。阅读文档以了解使用方法。

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

关于javascript - socket.io 客户端是否必须存在于全局范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20666169/

相关文章:

javascript - 由于 socket.io 无法构建 JMVC 应用程序

angularjs - 无法直接导航到 URL Angular UI 路由器

javascript - 通过 jquery/javascript 将文本添加到 Twitter 分享 API

javascript - 使用 d3js 在单击另一个节点时添加节点

javascript - jQuery:向表中添加行并在 DOM 中选择它

javascript - CSS/JavaScript : dynamic multiple columns

mongodb - Socket.io、Passport、MongoDB 和 Passport.socketio 在生产中损坏

javascript - 我如何通过 Angular 向套接字服务器发送数据和获取数据

javascript - 如何使用 resharper testr jasmin 测试 spa js 模块?

javascript - Express 不加载 javascript 到客户端