我一直在尝试使用 RequireJS 将 Socket.io 加载到我的应用程序中,但它总是出错。
使用的版本:
- NodeJS: 0.10.17
- Socket.io: 0.9.16
- Socket.io 客户端: 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
});
文件.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 文件的修改副本,第 107 行根据解决方案 2 进行了更改(参见链接),虽然这有效,但它不是真正的解决方案。所以我会保留这个问题。
我也尝试过将 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
};
});
关于node.js - 使用 RequireJS 加载 Socket.io 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19334224/