试图了解RxJS导入

lex*_*x82 8 rxjs typescript rxjs5 angular

我很难弄清楚这个import语句究竟是如何工作的(在一个用Typescript编写的Angular应用程序中):

import 'rxjs/add/operator/toPromise';
Run Code Online (Sandbox Code Playgroud)

我得到的rxjs是映射到node_modulesSystemJS配置文件中的相应子文件夹,但后来我被卡住了.我看到有一个index.js文件,但我不知道这是否或如何有助于解决该add/operator/...部分.

同样,我不明白这个:

import {Observable} from 'rxjs/Observable';
Run Code Online (Sandbox Code Playgroud)

同样,Observable.*这个地方没有文件文件.我猜它在某种程度上可以通过index.js文件工作,但我真的希望得到一个更透彻的理解,因为我读到很容易导入所有RxJS,这增加了页面加载时间.

我仔细看了一下Typescript模块解析文档,但我觉得这还不足以解释它.

更新:阅读下面接受的答案后,我发现我一直在查看node_modules/rx目录而不是node_modules/rxjs导入语句与目录结构完全匹配.

mar*_*tin 5

它非常简单,因为默认情况下TypeScript会查找node_modules目录.

导入以下内容:

import {Observable} from 'rxjs/Observable';
Run Code Online (Sandbox Code Playgroud)

解决了node_modules/rxjs/Observable.d.ts足以编译代码的问题.

同样,导入rxjs/add/operator/toPromise也被解析为node_modules/rxjs/add/operator/toPromise.ts.顺便说一下,您可以使用--traceResolution编译器选项来查看测试的TypeScript路径.

当你有编译的JS(例如commonjs格式)时,你可以运行你的应用程序,node因为它将调用require('rxjs/Observable')哪个将解析node_modules/rxjs/Observable.js.然后类似的rxjs/add/operator/toPromise.

请注意,RxJS github页面的代码结构与实际的npm包不同.基本上,只有package.jsonsrc编译.js.d.ts文件的目录上传到npm存储库(原始.ts源文件在,node_modules/rxjs/src但你永远不想直接使用它们).