如何在gulp构建过程中包含SignalR?

时间:2015-03-17 15:23:22

标签: javascript asp.net signalr gulp durandal-2.0

当我使用main.js(未缩小)运行我的Durandal应用时,它会正确加载signalr.coresignalr.hubs,但是,在使用gulp构建后,它无法加载{{1} }。

这是我的RequireJS配置:

signalr.hubs

这是我的gulpfile:

requirejs.config({
    paths: {
        'text': '../Scripts/text',
        'durandal': '../Scripts/durandal',
        'plugins': '../Scripts/durandal/plugins',
        'transitions': '../Scripts/durandal/transitions',
        'knockout': '../Scripts/knockout-3.2.0',
        'knockout.validation': '../Scripts/knockout.validation',
        'bootstrap': '../Scripts/bootstrap',
        'jquery': '../Scripts/jquery-2.1.3',
        'jquery.utilities': '../Scripts/jquery.utilities',
        'toastr': '../Scripts/toastr',
        'offline': '../Scripts/offline',
        'signalr.core': '../Scripts/jquery.signalR-2.2.0.min',
        "signalr.hubs": '../signalr/hubs?'
    },
    shim: {
        'jquery.utilities': {
            deps: ['jquery']
        },
        'bootstrap': {
            deps: ['jquery'],
            exports: 'jQuery'
        },
        'knockout.validation': {
            deps: ['knockout']
        },
        'signalr.core': {
            deps: ['jquery'],
            exports: '$.connection'
        },
        'signalr.hubs': {
            deps: ['signalr.core'],
        }
    }
});

define('jquery', function () { return jQuery; });
define('knockout', ko);
define('moment', moment);

define(['durandal/system', 'durandal/app', 'durandal/viewLocator', 'durandal/composition', 'global/session', 'knockout', 'knockout.validation', 'signalr.core', 'signalr.hubs'], function (system, app, viewLocator, composition, session) {
});

我不完全了解缩小过程,但我知道SignalR不符合AMD标准,因此可能会出现问题。此外,集线器端点生成动态JavaScript,因此有意义的是它不能包含在构建中。

var gulp = require('gulp'); var durandal = require('gulp-durandal'); gulp.task('durandal', function () { durandal({ baseDir: 'app', //same as default, so not really required. main: 'main.js', //same as default, so not really required. output: 'main-built.js', //same as default, so not really required. almond: true, minify: true }) .pipe(gulp.dest('app')); }); signalr.hubs很好地合作,我错过了什么?我应该从RequireJS中单独加载SignalR吗?

1 个答案:

答案 0 :(得分:2)

我想有一些方法可以使动态终点工作,但正如你已经认为的那样,有一点不同的野兽可以治疗。我建议您使用proxyless approach(这样就不需要动态端点了,但是您必须稍微调整一下您的调用和事件处理程序),或者在构建过程中添加一个步骤通过signar.exe实用程序序列化动态端点,如here所述。