繁体   English   中英

使用RequireJS加载Socket.io时出错

[英]Error loading Socket.io with RequireJS

我一直在尝试使用RequireJS将Socket.io加载到我的应用程序中,但它只是一直给出错误。

使用的版本:

  • NodeJS 0.10.17
  • Socket.io:0.9.16
  • Socket.io-client: 0.9.16
  • RequireJS: 2.1.8

解决方案:

的index.html

require.config({
    shim: {
        'socketio': {
            exports: 'io'
        },
    },
    wrap: false,
    paths: {
        socket: '/socket.io/socket.io',
        jquery: "jquery-2.0.3.min",
        // Other dependencies
    }
});
require(["open_rpg"],function(OpenRPG){
    // App code here
});

file.js

define(["socket"],
    function(io){
        // Socket started here

在使用RequireJS套接字之前正在工作。 Socket JS文件已正确加载。

输出:

Uncaught TypeError: Cannot call method 'push' of undefined

我尝试将Socket.io作为普通的JS脚本加载,并使用:

paths:
  "socket.io": 'empty:'

但那回归:

Uncaught Error: Mismatched anonymous define() module: function () { return io; }

更新:由于NodeJS保留了模块缓存,我添加了Socket.io.js文件的修改副本,根据解决方案2更改了第107行(请参阅链接),虽然这有效,但它不是真正的解决方案。 所以我会保持这个问题。

我还尝试将SocketIO的源代码添加为普通的JS文件,并在RequireJS中删除对它的所有引用,但它似乎仍然不兼容。

/socket.io/socket.io由nodejs的socket.io模块提供,它可以直接使用。 理论上应该有一个简短的片段,但我不确定它是否适用于RequireJS。

if (typeof define === "function" && define.amd) {
  define([], function () { return io; });
}

您可以下载整个客户端socket.io js并将其放在define(...)语句中。

define(function(){

    function add(a, b){
        return a + b;
    }

    return {
        add:add
    };
});

您的代码是正确的,但在加载index.html文件之前,您需要做一件必须启动套接字服务器的事情

我试过下面的代码,它对我来说很好。

的index.html

require.config({

 paths: { "socket.io": '/socket.io/socket.io', "jquery": "jquery-2.0.3.min" } }); 

file.js

define([“socket.io”],function(io){

  // Socket started here 

希望这对你有用

我的解决方案如下:

require.config({
    baseUrl: "/",
    paths: {
        'jquery': 'path/to/jquery.min',
        'socketio': 'path/to/socket.io'
    },
    shim: {
        'jquery': {
            exports: '$'
        },
        'socketio': {
            exports: 'io'
        }
}
});
require(['jquery', 'socketio'], function($, io){
    // your code
})

我希望它可以帮到你!

从版本1.0开始,此问题已得到解决,因此更新为1. *应该再次起作用。 或者,您提出的修复也应该起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM