2016-10-13 56 views
4

signalr.js我总是得到一个消息说:如何加载的WebPack里面角2

$ .hubConnection不是一个函数

Error: jQuery was not found. Please ensure jQuery is referenced before the SignalR client JavaScript file. consoling out "$" and "jquery" is undefined.

什么我需要做的,让signalr工作使用webpack?

回答

10

干净的解决方案:使用expose-loader !!

npm install expose-loader --save-dev 

您vendor.ts内

import 'expose-loader?jQuery!jquery'; 
import '../node_modules/signalr/jquery.signalR.js'; 

您webpack.config.ts内

new ProvidePlugin({ jQuery: 'jquery', $: 'jquery', jquery: 'jquery' }) 

说明: 的jquery.signalR.js脚本确实没有写成umd模块。这使得它默认情况下不会被webpack加载。它不需要jquery,但假设Jquery位于全局变量window.jQuery中。我们可以通过将jquery模块与expose-loader一起导入来在webpack中完成这项工作。这个加载器将确保jQuery的导出值暴露给jQuery全局变量。从而允许将signalr.js脚本作为下一个模块加载。

此外,如果您想通过使用$来使用signalr,您还必须使用jquery模块的provideplugin。内部webpack.config.js

+0

这可以加载jQuery和signalR,但由于未加载集线器代理,我仍无法调用'$ .connection.myHub'。我怎样才能实现这一点与webpack? – marsop

+0

使用动态生成的信号/集线器脚本是可选的。目前我不使用它,在我的webpack环境中。 –

+0

使用动态生成的信号/集线器脚本是可选的。我使用** $。hubConnection(this.url)**&** connection.createHubProxy(this.hubName)**,它的工作原理。 –