Official Angular 4 plunk有一个常见的问题,因为它加载了非捆绑的RxJS并且经常在对unpkg.com的请求中产生阻塞
是否可以修改SystemJS配置以在捆绑的Angular模块中使用捆绑的RxJS?
map: {
...
'rxjs': 'npm:rxjs/bundles/Rx.js'
},
packages: {
...
rxjs: {
defaultExtension: 'js'
}
}
效果不佳并导致404错误:
unpkg.com/rxjs@5.4.3/bundles/Rx.js/operator/share.js:1获取https://unpkg.com/rxjs@5.4.3/bundles/Rx.js/operator/share.js 404()
因为Angular捆绑模块包含如下导入:
import {Observable} from 'rxjs/Observable';
import {of } from 'rxjs/observable/of';
import {concatMap} from 'rxjs/operator/concatMap';
import {filter} from 'rxjs/operator/filter';
import {map} from 'rxjs/operator/map';
1 回答
一种简单的方法是从
map
删除rxjs
并将其作为rxjs*
添加到path
(我想你需要在这里使用绝对路径):但这仅适用于SystemJS 0.19 . *,因为不再支持0.20,不再支持通配符
*
,请参阅:https://github.com/systemjs/systemjs/issues/1039For Angular2 :我'm not aware if there'是SystemJS 0.20的任何推荐方法,但这已在RxJS GitHub页面上讨论过,因此您可以阅读整个帖子https://github.com/ReactiveX/rxjs/issues/2458 . 特别是从我的评论https://github.com/ReactiveX/rxjs/issues/2458#issuecomment-286706048然后另一个评论,我创建一个自定义AMD捆绑,这很简单,并与SystemJS 0.20以及https://github.com/ReactiveX/rxjs/issues/2458#issuecomment-287193937一起使用 .
Edit: 显然这现在只适用于Angular2而不适用于Angular4:https://plnkr.co/edit/ddRnL2I4ps2U2pdoRo04?p=info
For Angular4 我发现的简单方法是创建一个新的文件,用于填充缺少的导出(参见下面的评论):
然后加载此文件而不是捆绑的RxJS:
Angular4的工作演示:http://plnkr.co/edit/tu561CX0n1I9f53iVv12