【问题标题】:Does the socket.io client have to exist in the global scope?socket.io 客户端是否必须存在于全局范围内?
【发布时间】:2013-12-18 18:54:55
【问题描述】:

我正在使用一个由 browserify 创建的模块(比如M),它包括作为依赖项的 socket.io 客户端。 M 正在 AMD 应用程序中使用。 Inside said app, when M issues a connect call to the socket client, and when the chosen transport is jsonp-polling, attempting to execute the jsonp callback throws a ReferenceError: io is undefined.这对我来说很有意义,因为io 不是全局的,而是包装在模块M 中。

所以我的问题是,io 必须 存在于全球范围内吗?有没有办法让这个工作在不将io 添加到全局范围的情况下访问回调数组?

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

【问题讨论】:

    标签: javascript socket.io requirejs browserify


    【解决方案1】:

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

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

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

    https://github.com/eugeneware/decomponentify

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

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

    【讨论】:

    • 谢谢。我会进入那个,看看它是怎么回事。我会将此标记为答案,但可能会出现更多问题。干杯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    相关资源
    最近更新 更多