首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Durandal、Socket.io和require

Durandal、Socket.io和require
EN

Stack Overflow用户
提问于 2014-08-19 05:33:03
回答 3查看 305关注 0票数 0

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

我尝试了几种方法,包括main.js库中的路径,但由于它不是一个单独的js文件,所以它从未运行过。

如果任何人有这方面的经验,我将非常感谢!

谢谢

用代码编辑,

代码语言:javascript
复制
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'
   }
}

});

代码语言:javascript
复制
  define(['durandal/system', 'durandal/app', 'durandal/viewLocator', 'require',         'plugins/http'],  function (system, app, viewLocator, require, http) {


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

回答 3

Stack Overflow用户

发布于 2014-08-19 20:50:02

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

代码语言:javascript
复制
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创建了一个前端代理,可以按照上述方式使用。

票数 3
EN

Stack Overflow用户

发布于 2014-08-19 05:49:44

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

代码语言:javascript
复制
requirejs.config({
    paths: {
        ...,
        'socket': 'path/to/socket.io'
    },
 ...
});

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

代码语言:javascript
复制
define([..., 'socket'],  
function (..., socket) {
    // body here with access to socket
    socket.doSomething();
});
票数 0
EN

Stack Overflow用户

发布于 2014-08-19 06:00:34

代码语言:javascript
复制
  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配置中。

代码语言:javascript
复制
 define(['durandal/system', 'durandal/app', 'durandal/viewLocator', 'require', 'plugins/http', 'socket'],  function (system, app, viewLocator, require, http, socket) {

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

代码语言:javascript
复制
Module name "events" has not been loaded yet for context: _. Use require([]) exception

。页面现在确实加载了,但我想我也必须包含"events“?

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

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

它必须解决所有的依赖关系,因为npm socket.io在其内部具有模块。所需的js路径类似加载一个单独的js文件,我们socket.io有很多个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25372369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档