什么是tslint黑名单以及为什么angular-cli在tslint.json列表中默认rxjs?

时间:2017-08-15 16:35:51

标签: rxjs angular-cli tslint

默认情况下,对于angular-cli项目,tslint设置包含了波动的东西。我最近接触过一个新的开发人员,我在Atom中配置了他们的tslint实例。

我被问及以下一行:

import { Observable, BehaviorSubject } from 'rxjs';

TSLinter说rxjs被列入黑名单。我去了tslint.json文件,果然,它被列出了。

这个黑名单是什么,是否可以保护应用免受某些侵害?

为什么默认情况下会将rxj添加到列表中?

我应该在什么条件下添加别的东西呢?

我想指出我知道如何“解决”问题::

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

问题仍然在于TSLint背景下黑名单的含义。

3 个答案:

答案 0 :(得分:15)

这是因为您应该(至少在浏览器应用中)从未'rxjs'添加,并且始终使用更具体的内容,例如'rxjs/Observable''rxjs/BehaviorSubject'

当您包含'rxjs'时,您实际上包含此文件:https://github.com/ReactiveX/rxjs/blob/master/index.js,其中包括整个捆绑的RxJS库(所有运营商,计划程序等)。因此,您包含了许多您甚至不使用的内容,并且您的应用程序变得超出了必要的范围(我认为使用webpack2时,树木震动并没有帮助,一旦代码被包含在其中,它就会出现问题。将成为最终包的一部分,但我可能错了。)

我认为可以直接从'rxjs'应用中的node导入(例如后端应用),但它所包含的内容并不重要,而且代码就是你#&# 39;不再使用,这种方式更容易使用。

答案 1 :(得分:4)

原因是由于 tslint.json 的变化,因为他们不希望将 rxjs 的整个模块加载到Angular Application上,因为它使它成为依赖性加载较重。而是仅加载应用程序所需的子模块。

enter image description here

要解决此问题,请更改

import { Observable, BehaviorSubject } from 'rxjs';

到:

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';

答案 2 :(得分:1)

此链接更清楚地解释了:

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,这将导入rxjs库中的所有内容(Observable,BehaviorSubject,ReplaySubject,Subscriber,Subscription等等),这是一个比实际更多的依赖项。除非您确实需要在导入的文件中使用大部分内容,否则最好在自己的行上导入每个依赖项,例如

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

这导致引入的依赖项减少,希望编译的文件大小更小。