我一直在尝试使用RequireJS将Socket.io加载到我的应用程序中,但它只是一直出错。
使用的版本:
的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中删除对它的所有引用,但它似乎仍然不兼容。
答案 0 :(得分:1)
/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
};
});
答案 1 :(得分:0)
您的代码是正确的,但在加载 index.html 文件之前,您需要做一件必须启动套接字服务器的事情
我试过下面的代码,它对我来说很好。
<强>的index.html 强>
require.config({
paths: { "socket.io": '/socket.io/socket.io', "jquery": "jquery-2.0.3.min" } });
<强> file.js 强>
定义([ “socket.io”], 功能(IO) {
// Socket started here
希望这对你有用
答案 2 :(得分:0)
我的解决方案如下:
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
})
我希望它可以帮到你!
答案 3 :(得分:-1)
此问题自版本1.0起已解决,因此更新为1. *应该再次有效。或者,您提出的修复也应该有效。