/ / Come includere SignalR con gulp build process? - javascript, asp.net, signalr, gulp, durandal-2.0

Come includere SignalR con gulp build process? - javascript, asp.net, signalr, gulp, durandal-2.0

Quando eseguo la mia app Durandal con main.js (non minimizzato), carica signalr.core e signalr.hubs correttamente, tuttavia, dopo aver costruito con gulp, non riesce a caricare signalr.hubs.

Ecco la mia configurazione RequireJS:

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) {
});

Ecco il mio gulpfile:

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"));
});

Non capisco appieno la minificazioneprocesso, ma so che SignalR non è compatibile con AMD, quindi potrebbe essere il problema. Inoltre, l'endpoint dell'hub produce JavaScript dinamico, quindi avrebbe senso che non possa essere incluso nella build.

Cosa mi manca per ottenere signalr.hubs per giocare bene con main-built.js? Dovrei caricare SignalR separatamente da RequireJS?

risposte:

2 per risposta № 1

Suppongo che ci siano modi per far funzionare l'endpoint dinamico, ma come hai già pensato che è un po 'una bestia diversa da trattare. Ti suggerirei di usare la approccio senza proxy (che rimuove la necessità dell'endpoint dinamico, ma dovrete modificare un po 'le chiamate e i gestori di eventi) oppure aggiungere un passaggio al processo di compilazione per serializzare l'endpoint dinamico attraverso il signar.exe utilità, come spiegato Qui.