2017-09-15 6 views
0

私が取り組んでいるパッケージがいくつかあります。クラスをエクスポートします。一般的な考え方では、データストアの動作を定義するコアパッケージ、ポストグル用のデータストアを実装するポストグルパッケージ、レディスストアを使用して同じものを実装する別のパッケージなどがあります。依存関係の割り当てエラーを回避するためのベストプラクティス?

私の問題は私の依存関係ツリーにあります。なぜなら、ベースデータストアはrxjsといくつかのプラグインモジュールに依存しているからです。リファレンスrxjs。だから、コアとpostgresのモジュールは正確 rxjsの同じバージョンに依存することを宣言しない限り

+ node modules 
+ -- core 
    + rxjs 5.4.0 
+ -- postgres 
    + rxjs 5.4.1 

は、これら二つの異なるrxjsパッケージは、重複排除得ることはありません。

効果的には同じバージョンですが、そうではありません。私はそれを得る。私はコーナーケースを扱うことができます。問題は、2つの異なるバージョンがあるので、私は基本的には、(私のコアパッケージで宣言された)ジェネリックストア変数に(私はpostgresパッケージで宣言された)PostgresStoreを割り当てることはできませんので、私はもはや

const pgstore: Store = new PostgresStore(); 

を言うことはできないということですrxjsが再生されているため、私がStoreにプライベートプロパティとして保存したSubject<string>は、2つの異なる種類のSubjectになり、それらは相互割り当てできません。 (たとえば、SubjectがSubject型に割り当てられないためにコンパイルが失敗するなど、この名前の2つの異なる型が存在しますが、関係はありません)。

これは珍しいことではありません。このハングアップを回避するためのベストプラクティス(依存関係、依存関係などの構造化)は何ですか?基本的には非常に脆いインストールになります。そして、しばらくして、npmとpackage.jsonファイルを手にして、適切に重複除外するために1時間を費やさなければなりません(それは、ローカルのdevに従属する人にnpm linkを使用する能力を妨げます)これは、重複をさらに困難にするためです)。

+0

ええと、答えの少なくとも一部は次のようです:プライベート/保護されたメンバーを使用しないでください。彼らは、最終的には、タイプスクリプトを構造的なタイプから名目上のタイプへと(効果的に)変更することになり、これは「正しいがひどい」振る舞いとみなすことができます。 – pfooti

答えて

0

具体的な解決策の1つは、hereの概略で、typescriptに必要なもののバージョンを具体的に伝えることによって問題のある宣言を修正することです。私は含まれるように私のtsconfig.jsonを更新しました:

compilerOptions: { 
    "baseUrl": ".", 
    "paths": { 
    "@angular/*": ["node_modules/@angular/*"], 
    "rxjs": ["node_modules/rxjs"], 
    "plump": ["node_modules/plump"], 
    "rxjs/*": ["node_modules/rxjs/*"] 
    } 
} 

それは今の私の問題を解決しているようだ - 私はまだtypescriptですが、私と一緒にかなり動揺取得せずに私のふっくらしたモジュール上で動作するようにnpm linkを使用することができますよ。

ここで質問を残しておいてください。ここではより良い回答があるかもしれません。

関連する問題