我很难设置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);发布于 2014-08-19 20:50:02
为了正常工作,您需要将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创建了一个前端代理,可以按照上述方式使用。
发布于 2014-08-19 05:49:44
您需要在requirejs配置中包含socket.io:
requirejs.config({
paths: {
...,
'socket': 'path/to/socket.io'
},
...
});然后,您可以从应用程序中访问库,如下所示:
define([..., 'socket'],
function (..., socket) {
// body here with access to socket
socket.doSomething();
});发布于 2014-08-19 06:00:34
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。页面现在确实加载了,但我想我也必须包含"events“?
问题似乎是socket io的标准要求是这样的,
var = require('socket.io')(http);
它必须解决所有的依赖关系,因为npm socket.io在其内部具有模块。所需的js路径类似加载一个单独的js文件,我们socket.io有很多个。
https://stackoverflow.com/questions/25372369
复制相似问题