Ionic 4 本机插件地理定位给了我“找不到模块:错误:无法解析 'rxjs/Observable'”

Posted

技术标签:

【中文标题】Ionic 4 本机插件地理定位给了我“找不到模块:错误:无法解析 \'rxjs/Observable\'”【英文标题】:Ionic 4 native plugin geolocation gives me "Module not found: Error: Can't resolve 'rxjs/Observable'"Ionic 4 本机插件地理定位给了我“找不到模块:错误:无法解析 'rxjs/Observable'” 【发布时间】:2019-01-08 15:36:27 【问题描述】:

我正在尝试在ionic 4 中使用离子原生插件geolocation,但出现此错误:

编译失败。

./node_modules/@ionic-native/geolocation/index.js 未找到模块: 错误:无法解析“rxjs/Observable” 'C:\Projects\ionic\prayers\node_modules\@ionic-native\geolocation'

这是我的依赖:

"dependencies": 
    "@angular/common": "6.0.9",
    "@angular/core": "6.0.9",
    "@angular/forms": "6.0.9",
    "@angular/http": "6.0.9",
    "@angular/platform-browser": "6.0.9",
    "@angular/platform-browser-dynamic": "6.0.9",
    "@angular/router": "6.0.9",
    "@ionic-native/core": "5.0.0-beta.14",
    "@ionic-native/geolocation": "^4.11.0",
    "@ionic-native/splash-screen": "5.0.0-beta.14",
    "@ionic-native/status-bar": "5.0.0-beta.14",
    "@ionic/angular": "4.0.0-beta.0",
    "@ionic/ng-toolkit": "1.0.0",
    "@ionic/schematics-angular": "1.0.1",
    "cordova-plugin-geolocation": "^4.0.1",
    "core-js": "^2.5.3",
    "rxjs": "6.2.2",
    "zone.js": "^0.8.26"
  ,

这是我使用的代码:-

app.module.ts

import  Geolocation  from '@ionic-native/geolocation';
...
NgModule(
  declarations: [AppComponent],
  entryComponents: [],
  imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule],
  providers: [
    StatusBar,
    SplashScreen, Geolocation,
     provide: RouteReuseStrategy, useClass: IonicRouteStrategy 
  ],
  bootstrap: [AppComponent]
)

home.ts

import  Geolocation  from '@ionic-native/geolocation';
...
constructor(private geolocation: Geolocation) 

【问题讨论】:

【参考方案1】:

您安装了rxjs 6.2.2,在其中更改了导入语句。

稳定的 ionic-native 仍在使用rxjs 5.x。

您可以查看迁移指南here。

您可以使用rxjs-compat

npm i rxjs-compat --save

或者回到 5.x 版本。

另一种选择是将@ionic-native/geolocation 版本更新为5.0.0-beta14

就像你的其他离子原生插件一样,因为根据package.json,它应该使用 rxjs 6.x

npm i --save @ionic-native/geolocation@5.0.0-beta.14

【讨论】:

我在使用原生地理编码器时遇到问题,所以我猜也是同样的问题.. 我怎么知道原生 api 的新 beta 版本? 你需要检查他们的 repo,看看他们是否升级了 rxjs.. 否则你需要使用旧版本直到那时 npm i --save @ionic-native/geolocation@5.0.0-beta.14 为我工作【参考方案2】:

我遇到了同样的问题,在将 Geolocation 升级到 5.0.0-beta.14 时,我还必须将导入路径更新为:import Geolocation from "@ionic-native/geolocation/ngx"; OBS:对于像UniqueDeviceID 这样的其他导入,我还必须在导入路径中添加/ngx 后缀。 我认为由于 Angular 版本 6 需要这个后缀。

【讨论】:

是的,在 Ionic 4 文档中,他们声明 Angular 需要“/ngx”路径,因为 ionic 现在支持其他框架,但是他们给了我们 npm 命令来安装旧版本的地理定位有 "/ngx" ...

以上是关于Ionic 4 本机插件地理定位给了我“找不到模块:错误:无法解析 'rxjs/Observable'”的主要内容,如果未能解决你的问题,请参考以下文章

Ionic Cordova Build prod:找不到模块“。” - 打字稿版本>3

在 Ionic 2 中实施地理定位跟踪时出错

ionic vue 背景地理定位跟踪在 5 分钟后停止

如何更改 Ionic 2 iOS 应用程序的位置访问描述?我正在为我的应用程序使用科尔多瓦地理定位插件

如何使用 Ionic2(地理定位)检查 GPS 是不是启用?

ionic2:浏览器中的地理定位失败并出现错误:异常:未捕获(承诺中):错误