如何在Angular 2中的webpack中加载signalr.js

han*_*ans 8 signalr webpack angular

我总是收到一条消息说:

$ .hubConnection不是一个函数

错误:找不到jQuery.请确保在SignalR客户端JavaScript文件之前引用jQuery.安慰"$"和"jquery"是不确定的.

我需要做什么,让信号器使用webpack工作?

han*_*ans 14

清洁解决方案:使用expose-loader !!

npm install expose-loader --save-dev
Run Code Online (Sandbox Code Playgroud)

在你的vendor.ts里面

import 'expose-loader?jQuery!jquery';
import '../node_modules/signalr/jquery.signalR.js';
Run Code Online (Sandbox Code Playgroud)

在你的webpack.config.ts中

new ProvidePlugin({ jQuery: 'jquery', $: 'jquery', jquery: 'jquery' })
Run Code Online (Sandbox Code Playgroud)

说明:jquery.signalR.js脚本确实不是作为umd模块编写的.默认情况下,它不能由webpack加载.它不需要jquery,但假设Jquery存在于全局变量window.jQuery中.我们可以通过使用expose-loader导入jquery模块在webpack中完成这项工作.这个加载器将确保jquery的导出值暴露给jQuery全局变量.因此允许加载signalr.js脚本作为下一个模块.

此外,如果您想稍后使用$使用signalr,您还必须使用jquery模块的provideplugin.在webpack.config.js中


Ved*_*ran 5

感谢hannes和Microsoft的本指南,我设法使SignalR使用ES6语法与Webpack和TypeScript一起使用。

之前:

///<reference path="./vendor/typings/signalr/signalr.d.ts"/>

interface SignalR {
    myHub: Some.Stuff.IMyHubProxy;
}

namespace MyWebsite.Stuff {
    export class SignalRConnectionService {
        ...
        public start() {
            var myHubProxy = $.connection.myHub;

            myHubProxy.client.onSomethingChanged = (eventArgs) => {
                // do stuff
            };

            $.connection.hub.start();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

后:

import "signalR";

export class SignalRConnectionService {
    public start() {
        ...
        const hubConnection = $.hubConnection();
        const myHubProxy = hubConnection.createHubProxy('myHub');

        myHubProxy.on('onSomethingChanged', (summary) => {
            // do stuff
        });

        hubConnection.start();
    }
}
Run Code Online (Sandbox Code Playgroud)

webpack.config.js:

plugins: [
    new webpack.ProvidePlugin({
        $: "jquery",
        'window.jQuery': 'jquery',
        jQuery: "jquery"
    })
]
Run Code Online (Sandbox Code Playgroud)

packages.json:

"dependencies": {
  "jquery": "~2.1.4",
  "signalr": "~2.2.3"
}
Run Code Online (Sandbox Code Playgroud)

注意:您也将需要删除的加载,<script src="/signalR/hubs"/>因为不再需要加载。