2017-08-15 1 views
3

デフォルトでは、angle-cliプロジェクトでは、tslintの設定には不気味なものが満載されています。私は最近、新しい開発者がAtomでtslintインスタンスを設定していることに近づいていました。tslintブラックリストとは何ですか?また、tslint.jsonのリストでangular-cliのデフォルトのrxjsはなぜですか?

Iは、次の行について質問されました:

import { Observable, BehaviorSubject } from 'rxjs'; 

TSLinterがrxjsがブラックリストに載っていると言っています。私はtslint.jsonファイルに行きました、そして確かに、それはリストされました。

このブラックリストは何ですか、それは何かからアプリを保護していますか?

rxjsがデフォルトでリストに追加されるのはなぜですか?

私はそれに何か他の条件を追加する必要がありますか?


私はどのように「修正」に問題を知っていることを指摘したいと思います::

import { Observable } from 'rxjs/observable'; 
import { BehaviorSubject } from 'rxjs/BehaviorSubject'; 

質問はまだTSLintのコンテキストでブラックリストの意味であります。

答えて

7

これは、少なくともブラウザアプリケーションでは'rxjs'には含まれず、常に具体的な例('rxjs/Observable'または'rxjs/BehaviorSubject'など)を使用する必要があるからです。

'rxjs'を含めると、バンドルされたRxJSライブラリ(すべての演算子、スケジューラなど)を含むhttps://github.com/ReactiveX/rxjs/blob/master/index.jsというファイルが実際に含まれています。だからあなたは、あなたが使っていなくても、あなたのアプリが必要以上に大きくなっていることをたくさん含んでいます(私はwebpack2を使ったツリーシェイキングは役に立たないと思います。コードが含まれていれば、私は間違っているかもしれない)。

nodeのアプリ(例:バックエンドアプリ)に直接'rxjs'からインポートすると大丈夫だと思います。使用しないコードも含まれていても問題ありません。

+0

は、より多くのを探して...私の質問(複数可)に正確に答えを同意した...しかしありませんtslint 'blacklist'の明快さ – beauXjames

+0

'blacklist'オプションはインポートをブラックリストに登録し、それを使用しようとすると警告を出します。私はそれがブラックリスト... https://palantir.github.io/tslint/rules/import-blacklist/と呼ばれる理由だと思う。もちろん、あなたはそれを削除することができ、あなたのアプリは動作します。 – martin

+0

そのリンクは有益です。何らかの理由で私の検索がそれを引き上げていない。だから、プロジェクトのすべての開発者がtslintの設定を念頭に置いている限り、これは良いツールになるはずです。私はそれが強制され、下線のような他のプロジェクトも含めて、それが同じ家族の一部であると考えるようになるでしょう。 – beauXjames

0

このリンクは、もう少し明確に説明しています

https://fullstack-developer.academy/resolving-import-is-blacklisted-tslint-error-for-rxjs-and-angular/

を基本的に、あなたは

import { Observable, BehaviorSubject } from 'rxjs'; 

または

import { Observable, BehaviorSubject } from 'rxjs/Rx'; 

それはRx.jsに引っ張るようにインポートするときになりますすべてをインポートする(Observable、BehaviorSubject、ReplaySubject、Subscrib er、Subscriptionなど...)rxjsライブラリでは、実際よりも多くの依存関係があります。あなたは本当にあなたがインポートするファイルにこれらのほとんどを使用する必要がない限り、あなたはこれがうまくいけば、より少ないに引かれている依存関係と小さいコンパイルファイルサイズになり

import { Observable } from 'rxjs/Observable'; 
import { Subscription} from 'rxjs/Subscription'; 

のように独自の行に各依存関係をインポートするほうが良いでしょう。彼らはそれが依存負荷のそれは重くなりますようrxjsのモジュール全体が角アプリケーションにロードしたいいけないよう

0

それのための理由は、tslint.jsonの変化です。代わりに、アプリケーションに必要なサブモジュールのみをロードします。

import { Observable, BehaviorSubject } from 'rxjs'; 

を変更、それを解決するために

enter image description here

import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/map'; 
import 'rxjs/add/operator/catch'; 
関連する問題