Durandal,Socket.io和要求

时间:2014-08-18 21:33:03

标签: sockets socket.io require durandal

我很难设置Durandal以包含socket io库。

我尝试了一些方法,包括main.js库中的路径,但因为它不是单个js文件,所以它从未起作用。

如果有人有这方面的经验,我非常感激!!

由于

使用代码编辑,

requirejs.config({
paths: {
    'text': '../lib/require/text',
    'durandal':'../lib/durandal/js',
    'plugins' : '../lib/durandal/js/plugins',
    'transitions' : '../lib/durandal/js/transitions',
    'knockout': '../lib/knockout/knockout-3.1.0',
    'bootstrap': '../lib/bootstrap/js/bootstrap',
    'jquery': '../lib/jquery/jquery-1.9.1',
    'toastr' : '../lib/toastr/toastr',
    'moment' : '../lib/moment/moment',
    'when' : '../lib/when/when',
    'flipclock': '../lib/flipclock/flipclock',
    'require': '../lib/require/require'
},
shim: {
    'bootstrap': {
        deps: ['jquery'],
        exports: 'jQuery'
   }
}

});

  define(['durandal/system', 'durandal/app', 'durandal/viewLocator', 'require',         'plugins/http'],  function (system, app, viewLocator, require, http) {


var io = require('socket.io')(http);

3 个答案:

答案 0 :(得分:3)

为了工作,您需要将socket.io添加到路径配置中,以及定义填充程序。 确保套接字io的路径设置正确。

paths: {
    ....
    'socketio': 'PATH_TO/socket.io/socket.io'
},
shim: {
   'socketio': {
    'exports': 'io'
   }
}

define(['durandal/system', 'durandal/app', 'durandal/viewLocator', 'bootstrap',
        'socketio', 'knockout'],
function (system, app, viewLocator, bootstrap, io, ko) {
  // if its on the same host
  var testsocket = io.connect(window.location.hostname);

  // otherwhise
  var testsocket = io.connect(PATHTOSOCKET);
});

应该做的伎俩

编辑: 此外,您似乎想在前端使用NPM包,这显然不是可行的方法。 Socket.IO创建了一个前端代理,可以按照上述方式使用。

答案 1 :(得分:0)

您需要在requirejs配置中包含socket.io

requirejs.config({
    paths: {
        ...,
        'socket': 'path/to/socket.io'
    },
 ...
});

然后,您可以从应用程序中访问库,如:

define([..., 'socket'],  
function (..., socket) {
    // body here with access to socket
    socket.doSomething();
});

答案 2 :(得分:0)

  paths: {
    'text': '../lib/require/text',
    'durandal':'../lib/durandal/js',
    'plugins' : '../lib/durandal/js/plugins',
    'transitions' : '../lib/durandal/js/transitions',
    'knockout': '../lib/knockout/knockout-3.1.0',
    'bootstrap': '../lib/bootstrap/js/bootstrap',
    'jquery': '../lib/jquery/jquery-1.9.1',
    'toastr' : '../lib/toastr/toastr',
    'moment' : '../lib/moment/moment',
    'when' : '../lib/when/when',
    'flipclock': '../lib/flipclock/flipclock',
    'require': '../lib/require/require',
    'socket': '../lib/socket.io/lib/socket'
},

所以我把它包含在我的requirejs配置中。

 define(['durandal/system', 'durandal/app', 'durandal/viewLocator', 'require', 'plugins/http', 'socket'],  function (system, app, viewLocator, require, http, socket) {

这似乎有所帮助,但现在我得到了,

Module name "events" has not been loaded yet for context: _. Use require([]) exception

。该页面现在加载,但我认为我也必须包含“事件”?

问题似乎是socket io的标准要求是这样的,

var io = require('socket.io')(http);

必须解决所有依赖关系,因为npm socket.io中包含模块。 requirejs路径类似于加载单个js文件,socket.io有很多。