2017-04-27 4 views
8

私は(活字体で書かれた角度のアプリケーションで)このimport文の作品がどのように正確に把握に苦労しています:RxJSの輸入を理解しようと

import 'rxjs/add/operator/toPromise'; 

私はrxjsは、それぞれのnode_modulesにマッピングされていることを取得SystemJS設定ファイルのサブフォルダを作成していますが、それから私は立ち往生しています。 index.jsファイルがあることがわかりましたが、これがadd/operator/...の部分を解決するのに役立つかどうか、またどのように役立つかわかりません。

同様に、私はこの1つを理解していない:

import {Observable} from 'rxjs/Observable'; 

は再び、この場所にはファイルObservable.*ファイルはありません。私はindex.jsファイルを使って動作していると思いますが、実際にはRxJSをすべて読み込み、ページの読み込み時間を増やすことは簡単であることを理解しています。

私は、Typescriptモジュールの解像度のドキュメントを詳しく見てきましたが、これを説明するには十分ではないと感じました。

更新:以下の受け入れ答えを読んだ後、私はimport文は、ディレクトリ構造と完全に一致するので、代わりにnode_modules/rxjsnode_modules/rxディレクトリを見ていた考え出しました。

答えて

5

TypeScriptはデフォルトでnode_modulesというディレクトリを参照するので、かなりシンプルです。

import {Observable} from 'rxjs/Observable'; 

は、コードをコンパイルするのに十分であるnode_modules/rxjs/Observable.d.tsとして解決されます。

次のインポート。

同様にrxjs/add/operator/toPromiseをインポートすると、node_modules/rxjs/add/operator/toPromise.tsと解決されます。 Btwでは、--traceResolutionコンパイラオプションを使用して、テスト対象のTypeScriptパスを確認できます。

あなたがコンパイルしたJS(例えば。commonjs形式で)を持っているとき、それはnode_modules/rxjs/Observable.jsに解決されrequire('rxjs/Observable')を呼ぶことにしますので、あなたがnodeでアプリケーションを実行することができます。同様にrxjs/add/operator/toPromiseと同様です。

RxJS githubページのコード構造が実際のnpmパッケージと異なることに注意してください。基本的には、package.jsonsrc dirがコンパイルされた.js.d.tsのファイルがnpmリポジトリにアップロードされます(オリジナルの.tsソースファイルはnode_modules/rxjs/srcにありますが、それらとは直接関係しません)。

+0

ああ、私は間違ったディレクトリを探していた... "rx"ではなく "rxjs"。今それは完全にはっきりしています、ありがとう! – lex82

+0

Martin、なぜ彼らは '/ add'プレフィックスを使用しましたか?それは意味をなしません –

+0

@Royi意味がありません? '/ add/...'ディレクトリにある全てのファイルは 'Observable.prototype'に演算子を追加するために使われます(例:https://github.com/ReactiveX/rxjs/blob/master/src/add/operator/ buffer.ts)。これにより、私のプロジェクトで実際に必要とする演算子だけを使用することができます。したがって、ツリー振れのJSバンドラ(rollup.js、webpack2など)はより小さなバンドルを生成できます。 – martin

関連する問題