升级Angular 5后Ionic Storage模块报OpaqueToken错误求助
解决Ionic Storage在Angular 5下的OpaqueToken错误方案
我之前也碰到过完全一样的问题——升级到Angular 5后,大部分Ionic Native插件的OpaqueToken错误都通过升级插件解决了,唯独Ionic Storage还卡在node_modules/@ionic/storage/es2015/storage.d.ts里的导入问题,而且GitHub上的142号issue当时也没解决。这里分享几个亲测有效的临时解决方案:
临时修改依赖文件(应急用,配合patch-package持久化)
Angular 5里OpaqueToken已经被废弃,替换成了InjectionToken,所以我们可以手动修改存储的类型定义文件:- 打开
node_modules/@ionic/storage/es2015/storage.d.ts - 将顶部的
import { OpaqueToken } from '@angular/core';替换为import { InjectionToken } from '@angular/core'; - 把文件中所有出现
OpaqueToken的地方全部替换成InjectionToken - 为了避免每次
npm install后修改被覆盖,推荐用patch-package工具保存修改:- 安装依赖:
npm install patch-package --save-dev - 修改完文件后运行:
npx patch-package @ionic/storage - 之后每次执行
npm install,这个修改都会自动被应用
- 安装依赖:
- 打开
安装兼容Angular 5的Ionic Storage版本
如果你不想修改依赖文件,可以降级到适配Angular 5的特定版本,比如2.2.0版本(这个版本经过测试可以在Angular 5环境下正常运行):npm install @ionic/storage@2.2.0 --save手动构建Storage提供者,绕过原有的OpaqueToken
你可以在AppModule里手动创建一个InjectionToken来替代插件默认的OpaqueToken,自定义Storage的注入逻辑:import { NgModule } from '@angular/core'; import { InjectionToken } from '@angular/core'; import { Storage } from '@ionic/storage'; // 创建自定义的注入Token export const STORAGE_CONFIG_TOKEN = new InjectionToken('STORAGE_CONFIG'); @NgModule({ providers: [ { provide: Storage, useFactory: (config) => new Storage(config), deps: [STORAGE_CONFIG_TOKEN] }, // 这里配置你的存储参数,比如数据库名称、存储引擎等 { provide: STORAGE_CONFIG_TOKEN, useValue: { name: 'myAppStorage', driverOrder: ['indexeddb', 'sqlite', 'websql'] } } ] }) export class AppModule {}之后在组件或服务中正常注入
Storage即可,这个方法完全绕过了原插件的OpaqueToken问题。
这些方案都是临时解决办法,等官方修复了GitHub上的142号issue后,你就可以直接升级到最新版本的Ionic Storage了。
内容的提问来源于stack exchange,提问作者Arjun T Raj
相关产品推荐
相关产品推荐

