默认情况下,对于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背景下黑名单的含义。
答案 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上,因为它使它成为依赖性加载较重。而是仅加载应用程序所需的子模块。
要解决此问题,请更改
import { Observable, BehaviorSubject } from 'rxjs';
到:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
答案 2 :(得分:1)
此链接更清楚地解释了:
基本上,当您导入
时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';
这导致引入的依赖项减少,希望编译的文件大小更小。