【发布时间】:2018-10-29 03:42:55
【问题描述】:
以前我只能使用此代码导入使用过的运算符:
import 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/mergeMap';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/finally';
import 'rxjs/add/observable/empty';
import 'rxjs/add/observable/throw';
这会生成一个小包 (vendor.ts)。
如何在不需要 rxjs-compat 的情况下使用 RxJS 做到这一点?
将上面的代码更改为 import 'rxjs'; 会生成一个更大的包。
更新:
我遵循了您发布的所有答案,但没有任何效果。 这是我更新的 vendor.ts:
import 'rxjs/Observable';
import 'rxjs/Subscription';
import 'rxjs/Subject';
import 'rxjs/observable/throw';
import 'rxjs/operators/map';
import 'rxjs/operators/mergeMap';
import 'rxjs/operators/catchError';
import 'rxjs/operators/finalize';
我也尝试过使用 'rxjs/add/operator/*'。
这就是我导入 rxjs 的方式:
import {Observable} from 'rxjs/Observable';
import {Subscription} from 'rxjs/Subscription';
import {Subject} from 'rxjs/Subject';
import {_throw} from 'rxjs/observable/throw';
import {map} from 'rxjs/operators/map';
import {mergeMap} from 'rxjs/operators/mergeMap';
import {catchError} from 'rxjs/operators/catchError';
import {finalize} from 'rxjs/operators/finalize';
我根据此文档 (https://github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md#build-and-treeshaking) 更改了我的 Webpack 3 配置,但没有任何效果。
最后,看看 Webpack Bundle Analyzer 的结果:
捆绑包包括所有运算符。 我发现了这个相关的问题: https://github.com/angular/angular-cli/issues/9069
【问题讨论】:
-
rxjs-compat 正是为此目的而设计的。
-
@estus,但是这个库不只是用来保持与旧版本的兼容性吗?如何以新的方式使用它?没有 rxjs-compat 这不存在吗?
-
这就是它提供与旧版本兼容的方式。通过提供旧的导入样式。
-
@estus,但如何只使用新的方式,但减少供应商规模?
-
与使用 RxJS 5 的方式相同。stackoverflow.com/questions/42376972/… 。 rxjs-compat 需要安装,但不需要
require。
标签: angular typescript rxjs rxjs6