首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RxJS和AngularFire -安装了两个版本的RxJS

RxJS和AngularFire -安装了两个版本的RxJS
EN

Stack Overflow用户
提问于 2021-11-09 11:36:25
回答 1查看 430关注 0票数 3

问题

我最近升级了我的角度应用程序。我目前使用的是角12,Firebase 9和AngularFire 7 根据AngualrFire文档中的建议

ng --version

代码语言:javascript
复制
Package                         Version
---------------------------------------------------------
@angular-devkit/architect       0.1202.13
@angular-devkit/build-angular   12.2.13
@angular-devkit/core            12.2.13
@angular-devkit/schematics      12.2.13
@angular/cdk                    12.2.12
@angular/fire                   7.1.1
@angular/flex-layout            10.0.0-beta.32
@angular/material               12.2.12
@schematics/angular             12.2.13
rxjs                            6.6.7
typescript                      4.3.5

我的代码中有多个版本的RxJS存在问题。例如,当尝试使用AngularFire查询实时数据库时:

代码语言:javascript
复制
import { take } from 'rxjs/operators';

...

this.users$ = this.userKey$.pipe(
  switchMap(userKey => 
    db.list('/users', ref =>
      userKey ? ref.orderByChild('key').equalTo(userKey) : ref
    ).snapshotChanges().pipe(take(1))
  )
);

返回错误:

代码语言:javascript
复制
error TS2345: Argument of type 'MonoTypeOperatorFunction<SnapshotAction<unknown>[]>' is not assignable 
to parameter of type 'OperatorFunction<SnapshotAction<unknown>[], unknown>'.

 ).snapshotChanges().pipe(take(1))
                          ~~~~~~~

故障排除

我可以通过从node_modules of AngularFire导入node_modules运算符来修复这个问题。但这是一个问题,因为我需要使用根node_modules文件夹中的rxjs安装。

代码语言:javascript
复制
import { take } from '@angular/fire/node_modules/rxjs/operators';

我遇到了安装在我的项目中的两个不同版本的RxJS。运行npm list rxjs会给我这样的结果:

代码语言:javascript
复制
vex@11.0.0 /Users/timothydenning/code/lost-creekV2
├─┬ @angular-devkit/architect@0.1202.13
│ └── rxjs@6.6.7 
├─┬ @angular-devkit/build-angular@12.2.13
│ ├─┬ @angular-devkit/build-webpack@0.1202.13
│ │ └── rxjs@6.6.7 
│ ├─┬ inquirer@8.1.2
│ │ └── rxjs@7.4.0 
│ └── rxjs@6.6.7 
├─┬ @angular-devkit/core@12.2.13
│ └── rxjs@6.6.7 
├─┬ @angular/cli@12.2.13
│ ├─┬ @angular-devkit/schematics@12.2.13
│ │ └── rxjs@6.6.7 
│ └─┬ inquirer@8.1.2
│   └── rxjs@7.4.0 
├─┬ @angular/fire@7.1.1
│ └─┬ inquirer@8.2.0
│   └── rxjs@7.4.0 
├─┬ codelyzer@6.0.2
│ └── rxjs@6.6.7 
├─┬ firebase-tools@8.20.0
│ └─┬ inquirer@6.3.1
│   └── rxjs@6.6.7 
├─┬ inquirer@6.5.2
│ └── rxjs@6.6.7 
├─┬ inquirer-autocomplete-prompt@1.4.0
│ └── rxjs@6.6.7 
└── rxjs@6.6.7 

这告诉我,从‘RxJS /操作符’的导入来自RxJS v6.6.7。而从‘@ RxJS /fire/node_modules/RxJS/操作符’的导入来自于v7.4.0。

我的问题

如何从项目中删除rxjs@7.4.0并只保留rxjs@6.6.7

我尝试过各种各样的东西,比如:

  1. 删除rxjs 7 npm uninstall rxjs@7
  2. 清除node_modules并重新运行npm install
  3. 升级到rxjs 7(这打破了角度12)。
  4. 重新安装rxjs‘`npm安装rxjs@6

@角/火7具有RxJ6和7的对等依赖关系,所以我应该可以同时使用它们,对吗?

@angular/fire/package.json

代码语言:javascript
复制
"peerDependencies": {
  ...
  "rxjs": "~6.6.0 || ^7.0.0",
  ...
},
EN

回答 1

Stack Overflow用户

发布于 2021-11-21 03:07:04

您必须指定版本

代码语言:javascript
复制
npm i --save rxjs@6.6.0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69897437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档