我们有一个Angular 2应用程序,我们想开始使用AOT编译。足够简单......除了我的一个依赖...
我们使用autobahn.js通过Web套接字连接与我们的服务器进行通信。问题是在汇总中加载此依赖项。
autobahn.js的作者已经决定,对于他们的浏览器版本的库,他们将在bower(足够公平)而不是npm中托管它。
我们有一个库,用一些不错的实用程序包装autobahn.js,并为我们处理其他事情。这很棒,因为它是一种通用的解决方案。该库可以在浏览器和node.js服务器中使用。 (好极了)
然而,autobahn
的节点版本使用fs
,url
和其他节点特定功能。 (BOO)
他们的库的bower
版本使用了正确的浏览器等价物。
在包装器中我们有一个import * as autobahn from 'autobahn';
(我们使用typescript)这在节点中运行良好,并且在SystemJS中的某些配置也可以正常工作。
如何告诉rollup
(或rollup-plugin-commonjs
)指向bower_components/autobahnjs/autobahn.js
文件而不是node_modules/autobahn/index.js
文件,就像默认情况下那样。
import rollup from 'rollup';
import nodeResolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
import json from 'rollup-plugin-json';
import uglify from 'rollup-plugin-uglify';
export default {
entry: 'dist/iss/index.js',
dest: 'dist/iss/bundle.js',
sourceMap: false,
format: 'iife',
moduleName: 'statusMonitor',
external: [
'autobahn',
'moment',
'moment-timezone'
],
context: 'window',
plugins: [
nodeResolve({jsnext: true, module: true, browser: true}),
commonjs({
include: 'node_modules/**'
}),
json(),
uglify()
]
}
对我们有用的另一个选择是autobahn
也可以作为全局使用,如果我们可以修改汇总以使用autobahn
的全局window
那么这将适用于我们的用例。
有一个类似于node-resolve的rollup-plugin-bower-resolve插件 - 如果你在node-resolve之前在你的plugins
数组中包含它(或者在node-resolve中使用skip
选项)那么它应该能够找到autobahn
。
它现在在npm
https://github.com/crossbario/autobahn-js-browser
浏览器版本以autobahn-browser的名称发布到npm。安装时间:
npm install autobahn-browser
注意:Autobahn的NodeJS版本继续以autobahn的名义发布。