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

bea*_*mes 11 rxjs tslint angular-cli

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

我被问到以下几行:

import { Observable, BehaviorSubject } from 'rxjs';
Run Code Online (Sandbox Code Playgroud)

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

什么是黑名单,它是否保护应用程序免受某些侵害?

为什么rxjs默认添加到列表中?

我应该在什么条件下添加其他东西呢?


我想指出我知道如何'解决'这个问题::

import { Observable } from 'rxjs/observable';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
Run Code Online (Sandbox Code Playgroud)

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

mar*_*tin 17

这是因为你应该(至少在浏览器应用程序中)从不包含,'rxjs'并且总是使用更具体的例子'rxjs/Observable''rxjs/BehaviorSubject'.

当你包括'rxjs'你实际上包括这个文件:https://github.com/ReactiveX/rxjs/blob/master/index.js,其中包括整个捆绑的RxJS库(所有运营商,调度程序等).所以你要包括许多你甚至不使用的东西,你的应用程序变得比必要的大(我认为使用webpack2的树状结构没有帮助,一旦包含代码,它将成为最终包的一部分,但我可能错了).

我认为这是确定直接从导入'rxjs'node应用程序(如后端应用程序)和其中不管那么多了,它也含有编码你不打算使用这种方法就是使用更方便.


Shu*_*ari 5

这样做的原因是因为tslint.json中的更改,因为他们不希望将rxjs的整个模块都加载到Angular Application上,因为这会增加依赖项加载的负担。而是仅加载应用程序所需的子模块。

在此处输入图片说明

为了解决它,改变

import { Observable, BehaviorSubject } from 'rxjs';
Run Code Online (Sandbox Code Playgroud)

至:

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
Run Code Online (Sandbox Code Playgroud)