2016-06-10 5 views
2

Кто-нибудь получил SystemJS и SignalR для совместной работы? Я пытаюсь использовать SystemJS (от jspm) для загрузки SignalR, но независимо от того, что я делаю, всегда есть условие гонки с асинхронным загрузчиком. Примерно в половину времени, когда он загружается, SignalR не загружается ко времени запуска моего кода инициализации.SystemJS и SignalR

System.config({ 
    baseURL: '/Scripts', 
    map: { 
     'jquery': '/bundles/jquery', 
     'jquery.ui.widget': 'jquery-ui-1.10.4.js', 
    }, 
    meta: { 
     '/signalr/hubs': { 
      deps: ['jquery.signalR-2.2.0.min.js'] 
     } 
    } 
}); 
Promise.all([ 
    System.import('jQuery.FileUpload/jquery.fileupload.js'), 
    System.import('knockout-3.1.0.debug.js'), 
    System.import('/signalr/hubs') 
]) 
.then(function (libs, gg) { 
    var ko = libs[1]; 

    //My init code 
    var chat = $.connection.jobProgress; 
    // Throws '$.connection is undefined' about half the time 
}) 

ответ

1

Попробуйте использовать конфигурацию пакета signalr.

System.config({ 
    baseURL: 'Scripts', 
    map: { 
      "signalr-jquery": "Scripts/jquery.signalR-2.2.0", 
      "signalr": "signalr", 
      "jquery": "/bundles/jquery" //I would pull it from jspm also 
     }, 
     meta: { 
      "jquery": { 
       "format": "cjs" 

      }, 
      "signalr-jquery": { 
       "format": "global", 
       "deps": ["jquery"] 
      } 
     }, 
     packages: { 
      "signalr": { 
       "format": "global", 
       "defaultExtension": false, 
       "meta": { 
        "hubs": { 
         "format": "global", 
         "deps": ["signalr-jquery"] 
        } 
       } 
      } 
     } 
}) 

и импорт концентраторы

System.import('signalr/hubs').then(function(hubs) { 

    }) 
0

Я был в состоянии загрузить его с этой конфигурацией:

System.config({ 
    map: { 
     'jquery': 'node_modules/jquery/dist/jquery.js', 
     'signalrJquery': 'jquery.signalR-2.2.0.js', 
     'signalrHubs': 'jquery.signalR-2.2.0.Hubs.js' 
    }, 
    meta: { 
     "jquery-1.10.2.js": { exports: "$" }, 
     signalrJquery: {exports: "$"}, 
     signalrHubs: { 
      deps: ['jquery-1.10.2.js', 'signalrJquery'], 
     exports: "$" 
    } 
}); 

Тогда Пиль, как это:

import * as $ from 'signalrHubs'; 

или

var $ = require('signalrHubs'); 

Обратите внимание, что версия jquery в зависимостях - это версия, от которой зависит signalr. Остальная часть сайта может при необходимости использовать более новую версию.