冲突dojo.require和Socket.io客户端

时间:2014-05-04 13:19:54

标签: javascript node.js dojo socket.io

我使用dojo 1.8.6socket.io 0.9.16,加载socket.io.js client后发生dojo.require冲突,并且不再加载dojo模块。

require([ 'socket.io/socket.io' ])导致错误。

  

TypeError:无法读取属性' push'未定义的

我无法使用" dojox / socket"出于某种原因。

有人有任何想法吗?

2 个答案:

答案 0 :(得分:2)

从dojo 1.11开始,以下工作正常:

packages: [
    "dojo",
    {name: "socketio", location: "/socket.io", main: "socket.io"}
]

加载模块:

define([
    "socketio"
], function (socketio) { 
    var socket = socketio();
});

我认为它也适用于以前的版本,但我还没有测试过它。

或者你可以直接引用socket.io模块,因为它符合AMD标准。

define([
    "/socket.io/socket.io.js"
], function (socketio) { 
    var socket = socketio();
});

不幸的是,构建器仍会报告311错误(缺少依赖项),因此不会破坏构建。无法解决这个问题,因为没有package.js在哪里标记为仅复制...

答案 1 :(得分:0)

require语句需要是有效的AMD mid(模块标识符)。

通常,人们会将包添加到他们的配置中,例如:

var dojoConfig = {
    packages: [
        {name: 'socketio', location: 'path/to/socket.io/socket.io'}
    ]
}

然后要求它:

require(['socketio'], function (socketio) {
    // do something with socketio
});

至于为什么你不能使用dojox / socket,我没有看到任何评论的代码。您可能还想查看https://github.com/bryanforbes/tube,这是替换dojox / socket的草稿。