Ionic 3 - 使用 --prod 标志运行时,sqlite 显示“无法读取 openDatabase 的属性”的错误

Posted

技术标签:

【中文标题】Ionic 3 - 使用 --prod 标志运行时,sqlite 显示“无法读取 openDatabase 的属性”的错误【英文标题】:Ionic 3 - sqlite shows error of "can not read property of openDatabase" when run with --prod flag 【发布时间】:2018-02-27 02:47:25 【问题描述】:

我在 ionic 3 项目中使用cordova-sqlite-ext。我的代码在没有--prod 标志的情况下运行良好。

但是当我运行 ionic cordova run android --prod --relase 时,它显示“无法读取 openDatabase 的属性”

这是我的代码

  export class SqlLiteServiceProvider 
  private options = name: 'db.db', location: 'default',existingDatabase: 1,createFromLocation:1;
  public win = (<any>window);
  private db : any;

  constructor() 
    try
      if(this.win.cordova)
        this.db = this.win.sqlitePlugin.openDatabase(this.options);

      else
        this.db = this.win.openDatabase(this.options.name, '1.0', 'database', 5 * 1024 * 1024);
      
  catch(ex)
    alert(ex); // always alert error when run with --prod flag
  
  

【问题讨论】:

【参考方案1】:

据我所知,当您进行生产构建时,window 对象的处理方式有所不同。当使用 ionic-native 中未包含的 cordova-plugins 时,您需要做一些不同的事情。

告诉 typescript 你确定你的插件句柄存在于构建之后的某个地方:

declar var SQLitePlugin; // add this at the same level as imports

例如在ngOnInit()中使用它:

ngOnInit() 
  SQLitePlugin.openDatabase(...);

但我强烈建议您不要这样做,而是使用@ionic/storage@ionic-native/sqlite

【讨论】:

【参考方案2】:

您不能在调试模式下运行ionic cordova run android --prod --relase。它用于 google play 商店发布版本。如果您需要在您的设备上进行测试,您应该在CLI 下方运行。

ionic cordova run android --prod --device

【讨论】:

以上是关于Ionic 3 - 使用 --prod 标志运行时,sqlite 显示“无法读取 openDatabase 的属性”的错误的主要内容,如果未能解决你的问题,请参考以下文章

使用“-prod”构建运行时,Ionic 应用程序在启动画面处停止

运行 ionic ios build --prod --release 时出错

Ionic 2: - prod文件未编译错误:build prod failed:无法确定类HomePage的模块

Ionic 2 : -- prod 文件未编译错误:构建 prod 失败:无法确定类 HomePage 的模块

ionic cordova build android --prod 使 JavaScript 堆内存不足

ionic cordova build --prod --release 失败并产生错误