我正在使用由 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/