2016-10-13 89 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)**,它的工作原理。 –