Node.js socket.io 1.0.x与require.js不兼容?

Node.js socket.io 1.0.x与require.js不兼容?,node.js,socket.io,requirejs,Node.js,Socket.io,Requirejs,每当我尝试在require.js之后加载socket.io 1.0.x时,它都会生成 未捕获引用错误:未定义io RequireJS创建一组require和define方法。。。iojs文件看到了这一点,并定义了自己 首先包括socket.io或使用AMD我特别想要bower软件包(),并通过RequireJS进行合作。起初,ng套接字出错,因为未定义io,即使使用带垫片的DEP 因此,我添加了一个startSocketIo.js文件: define([ 'socket.io-client'

每当我尝试在require.js之后加载socket.io 1.0.x时,它都会生成

未捕获引用错误:未定义io


RequireJS创建一组
require
define
方法。。。iojs文件看到了这一点,并定义了自己


首先包括socket.io或使用AMD我特别想要bower软件包(),并通过RequireJS进行合作。起初,ng套接字出错,因为未定义
io
,即使使用带垫片的DEP

因此,我添加了一个
startSocketIo.js
文件:

define([
  'socket.io-client'],function(io) {
  window.io = io;
});
并将deps节添加到我的require config文件的根目录中:

deps: [
  './startSocketIo'
],
我认为这类似于通过脚本标签添加,对性能没有任何改善,但它允许我继续使用未修改的bower软件包,并对我的所有js使用requirejs。

Socket.io 0.x 对于socket.io 0.x,您需要在中导出require.js配置中的io:

shim: {   
  'socket.io-client': {    
     exports: 'io'    
   } 
}
和您的js文件:

define(['socket.io-client'], function () {
  // io is exported here    

  var socket = io.connect ...
}
define(['socket.io-client'], function (io) {
  // io an argument of the function   

  var socket = io.connect ...
}
Socket.io 1.x 对于socket.io 1.x,无需在require.js配置文件中导出io

和您的js文件:

define(['socket.io-client'], function () {
  // io is exported here    

  var socket = io.connect ...
}
define(['socket.io-client'], function (io) {
  // io an argument of the function   

  var socket = io.connect ...
}
但在这两种情况下,都必须在define中使用io对象,以便在需要时由require.js正确加载。

还请注意,您需要在浏览器中使用socket.io客户端,而不是socket.io

define(['socket.io-client'], function (io) {
  // io an argument of the function   

  var socket = io.connect ...
}