Angularjs 如何与angular 1.5/es6和webpack一起使用stomp

Angularjs 如何与angular 1.5/es6和webpack一起使用stomp,angularjs,websocket,webpack,karma-runner,stomp,Angularjs,Websocket,Webpack,Karma Runner,Stomp,我正在努力将stomp包括在我的项目中。使用jmesnil/stomp-websocket或子序列forkJSteunou/webstomp客户端 我尝试正确导入: import Stomp from 'stompjs';//or 'webstomp-client'; import SockJS from 'sockjs-client'; 然后像这样加载它: angular.module('app', [ uiRouter, ngTranslate, ngTranslateStaticFile

我正在努力将stomp包括在我的项目中。使用jmesnil/stomp-websocket或子序列forkJSteunou/webstomp客户端

我尝试正确导入:

import Stomp from 'stompjs';//or 'webstomp-client';
import SockJS from 'sockjs-client';
然后像这样加载它:

angular.module('app', [
uiRouter, ngTranslate, ngTranslateStaticFilesLoader, ngResource, ngFilter,
uiBootstrap, Stomp, SockJS
])
但我得到以下错误(两个版本都有):

(即使webtomp.js顶部有“函数webpackUniversalModuleDefinition(root,factory)”,这显然并没有完全满足其目的)

通过直接在使用的控制器顶部“广泛地”导入,可以绕过此错误,但是所有karma测试都没有运行(错误是:错误:找不到模块“net”),即使
节点:{net:'empty',tls:'empty',dns:'empty'}
已添加到webpack.config.js

在这一点上,我尝试的任何东西都感觉像是奇怪的黑魔法


是否有一个库版本、角度包装等的“星座”可以在我的设置(angular 1.5/es6/webpack 1.14/karma)中正常工作?

不要将其作为依赖项添加到角度模块中。Stomp库不是角度模块。可能有一座桥,但我认为没有必要

要在Webpack2中使用Stomp,请在使用Stomp的文件的tomp处简单地要求它,然后将其当作全局变量使用

const Stomp = require("stompjs/lib/stomp.js").Stomp;
在控制器/服务内部:

Stomp.client(...);
编辑

这种解决方案将更难进行单元测试,因为您将无法用“角度方式”轻松替换依赖关系。为了解决这个问题,您可以在主模块文件中将其定义为常量,然后使用AngularJS提供的DI

主模块文件

const Stomp = require("stompjs/lib/stomp.js").Stomp;

angular
    .module('app', [
        // dependencies
    ])
    .constant('Stomp', Stomp)
    // other controllers/services/etc.
function MyController(Stomp) {

    Stomp.client(...);

}
控制器/服务

const Stomp = require("stompjs/lib/stomp.js").Stomp;

angular
    .module('app', [
        // dependencies
    ])
    .constant('Stomp', Stomp)
    // other controllers/services/etc.
function MyController(Stomp) {

    Stomp.client(...);

}

你好谢谢。我试过了,用跺脚也行。有了这个常数,我可以将它注入控制器,这似乎比假设存在全局变量更干净。我想它可以在run()函数中删除,就像lodash一样。我现在正在挣扎的是SockJS,它拒绝接受同样的待遇。但这种方法似乎对stomp有效。