查看rxjs目录结构时,似乎有两个 observable 和 运算符 的副本文件夹 - 一个位于add
文件夹内,另一个位于add外。
有人可以解释为什么存在这两个副本吗?
答案 0 :(得分:2)
两组目录的用途略有不同。实例和类运算符的实际源存储在operator
文件夹之外的observable
和add
文件夹中。因此,例如,当您使用流$ .map时,该map
运算符的javascript代码将存在于非添加运算符文件夹中。
默认情况下,RxJS附带了大量的实例和类操作符来执行大量操作。但是,该库的大多数用户只会使用这些运算符的一小部分。因此,通过使用正确的导入,RxJS允许您在没有任何运算符的情况下创建Observable类,然后仅将您要使用的运算符添加到Observable类型。
第二个用例是add
文件夹的原因。
所以,例如,你可以:
// get the basic Observable type with no operators added at all
import {Observable} from 'rxjs/Observable';
// add the map instance operator so you can do observableInstance.map
import 'rxjs/add/operator/map';
// add the Observable.of class operator so you can do Observable.of
import 'rxjs/add/observable/of';
如果查看该add
文件夹中任何内容的源代码,您会看到它将大部分工作委托给non-add
版本 - 它只是修补了基本的Observable类型以添加运算符问题
@Eye的所有功劳:
为什么我们懒得以这种方式拆分代码?它主要完成了客户端代码的效率,特别是减少了必须从服务器发送到浏览器的代码的大小。因此,您只需导入代码observables / observers以及您需要的运算符,而不是使用大量代码导入整个库。这样做时,客户端捆绑包的大小将大幅减少。