dojo的冲突.require和Socket.输入输出端

conflict dojo.require and Socket.io client

本文关键字:Socket 输入输出 require 冲突 dojo      更新时间:2023-09-26

我使用dojo 1.8.6socket.io 0.9.16,加载socket.io.js client后,dojo.require发生冲突,无法再加载dojo模块

require([ 'socket.io/socket.io' ]) cause error.

TypeError: Cannot read property 'push' of undefined

由于某些原因,我不能使用"dojox/socket"。

有人知道吗?

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

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

with module loading:

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

我认为它在以前的版本中也可以工作,但我没有测试过。

也可以直接引用套接字。io模块,因为它兼容AMD。

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

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

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的替代草案。