2017-11-28 1 views
0

RxJSをピア依存として持つlibを開発しており、webpackを使ってバンドルしています。 externals: [require("webpack-rxjs-externals")()]を設定して、RxJSをバンドルから除外するようにwebpackを設定しました。Rib.Observableを返すLib関数は新しい演算子を継承しません

このlibにはObservableを返す関数があります。ような何か:

import { from } from 'rxjs/observable/from' 
import { map, distinctUntilChanged } from 'rxjs/operators' 

export default function xpto(predicate) { 
    return from(this).pipe(
    map(predicate), 
    distinctUntilChanged() 
) 
} 

この機能は、その後観察可能なフックを公開するオブジェクトにバインドし、期待どおりに動作します。

私はまたRxJSを含めてにそれらをパッチプロトタイプでRX事業者のカップルを追加しました別のプロジェクト、にこのLIBをインポートするときに問題が発生:にパッチを適用することにより

import 'lib' // the one with xpto function 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/filter' 

// this breaks because although xpto returns an Observable 
// it somehow wasn't patched with the filter operator 
xpto(predicate).filter(whatever).subscribe(etc) 

ObservableプロトタイプObservableインスタンスxptoが返され、インポートされた演算子がプロトタイプチェーンを介してアクセス可能であることが期待されましたが、そうではありません。

どうすればxpto機能がバインドされているのでしょうか?それが何であるかウェブパックはこれをバンドルしていますか?私はここで何が欠けていますか?

+0

何が 'にバインドすることxpto'で' this'べきでしょうか? –

+0

@ dev-null、私はReduxストアオブジェクトを拡張していますので、バインドされています。アイデアは、ストアの状態のObservableセレクタを持つことです。 –

+0

コードが完全ではないため、コードをバインドする際に間違いがあったかどうかは分かりません。 –

答えて

0

少なくとも2つのインスタンスがあるようです。一方は演算子を継承し、他方は演算子を継承しません。

この libのが含まれているアプリwebpack.config.jsに次を追加することによって固定することができます。

resolve: { 
    alias: { 
     'rxjs/Observable': path.join(__dirname, './node_modules/rxjs/Observable') 
    } 
} 
関連する問題