我正在努力将stomp包含在我的项目中。使用两个版本的jmesnil / stomp-websocket或随后的forkJSteunou / webstomp-client。
我尝试正确导入:
import Stomp from 'stompjs';//or 'webstomp-client';
import SockJS from 'sockjs-client';
并加载它:
angular.module('app', [
uiRouter, ngTranslate, ngTranslateStaticFilesLoader, ngResource, ngFilter,
uiBootstrap, Stomp, SockJS
])
但是我得到以下错误(两个版本):
Uncaught Error: [$injector:modulerr] Failed to instantiate module app due to:
Error: [$injector:modulerr] Failed to instantiate module {"VERSIONS":{"V1_0":"1.0","V1_1":"1.1","V1_2":"1.2"}} due to:
Error: [ng:areq] Argument 'module' is not a function, got Object
(即使webstomp.js上面有“功能webpackUniversalModuleDefinition(root,factory)”,显然还没有完全填满它的目的)
可以通过直接在所使用的控制器上“疯狂”地导入它来绕过这个错误,但是然后所有的业力测试都没有运行(错误是:错误:无法找到模块“net”),即使将node: { net: 'empty', tls: 'empty', dns: 'empty' }
添加到webpack.config.js。
此时我正在尝试的只是感觉就像怪异的黑魔法。
是否存在lib版本,角度包装等的“星座”,可以使用我的设置(angular 1.5 / es6 / webpack 1.14 / karma)正常工作?
答案 0 :(得分:3)
不要将其作为依赖项添加到角度模块。 Stomp库不是角度模块。可能有一座桥梁,但我认为没有必要。
要将Stomp与Webpack 2一起使用,只需在您使用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(...);
}