以前我只能使用此代码导入使用过的运算符:
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 的结果:
bundle 包括所有运算符。 我发现了这个相关的问题: https://github.com/angular/angular-cli/issues/9069
最佳答案
rxjs-compat
应该和rxjs
一起安装,它提供了对旧式导入的支持。
可以像使用 RxJS 5 一样使用 RxJS 6:
import 'rxjs/add/operator/map';
import { Observable } from 'rxjs/Observable';
这个兼容层预计会在 RxJS 7 中被移除。
关于angular - 如何在不需要 rxjs-compat 的情况下只导入 RxJS 6 中使用的运算符,如旧的 RxJS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50415719/