我正在使用由browserify创建的模块(比如M
),它包含socket.io客户端作为依赖项。 M
正在AMD应用程序中使用。在所述应用程序内部,当M
向套接字客户端发出连接调用时,并且当所选传输是jsonp-polling时,尝试执行jsonp回调会抛出ReferenceError: io is undefined
。这对我来说非常有意义,因为io
不是全局的,而是包含在模块M
中。
所以我的问题是,io
是否存在于全球范围内?有没有办法使这项工作能够在不将io
添加到全局范围的情况下访问回调数组?
免责声明 - 我感谢我没有提供任何示例代码,但我很难形成一个易于实现和运行的合适的模拟示例。如果问题真的没有任何意义那么请告诉我,我会看看我是否可以把东西放在一起,但如果有人认为他们可以回答它,或者指出我正确的方向而没有看到任何代码,请做!
答案 0 :(得分:3)
不,它不必在全局命名空间中,但它需要一些工作,你不能使用在github项目的根目录中找到的预构建文件。
您应该从源代码构建socketio-client
项目。唯一的问题是该项目是使用component.js
构建的,这是一个由伟大的TJ Hallowaychuck创建的简单客户端包管理器。您将遇到的问题是,当使用component(1)
构建组件时,它会附带自己的require()
函数实现,该函数使用browserify自己的实现在全局命名空间中竞争。
https://github.com/eugeneware/decomponentify
使用此转换,您可以在浏览器中使用由component(1)
和require()
构建的模块,就像任何其他启用浏览器的模块一样。阅读文档以供使用。
是的,我也等待客户端软件包管理标准化的一天。