我很难设置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);
答案 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有很多。