Cordova iOS项目重建报错:Can't find variable: NativeStorage 求助
解决Ionic 3 + Cordova 6.5 iOS平台NativeStorage找不到的问题
我之前维护旧Ionic项目时也碰到过一模一样的报错,结合你的情况,给你几个针对性的排查和解决步骤:
1. 确认NativeStorage插件的安装与平台同步
首先得确保插件真的装对了,而且同步到了iOS平台:
- 先检查已安装的Cordova插件:
看看输出里有没有cordova plugin listcordova-plugin-nativestorage,没有的话重新安装:ionic cordova plugin add cordova-plugin-nativestorage - 插件安装后一定要同步到iOS平台,执行:
ionic cordova prepare ios - 如果你用了Ionic Native的封装,还要保证
@ionic-native/native-storage的版本和Ionic 3匹配——Ionic 3对应4.x版本的@ionic-native包,安装命令:npm install @ionic-native/native-storage@4 --save
2. 确保在Cordova初始化完成后调用NativeStorage
Cordova插件必须等deviceready事件触发后才能访问,这是很多旧项目踩的坑:
- 在Ionic 3里,要把所有NativeStorage相关的操作放在
platform.ready()回调里,比如在你的服务或组件中:import { Platform } from 'ionic-angular'; constructor(private platform: Platform) { this.platform.ready().then(() => { // 在这里调用NativeStorage的方法,比如 window.NativeStorage.setItem('key', 'value'); // 或者用Ionic Native的封装 // this.nativeStorage.setItem('key', 'value'); }); } - 如果你在polyfills.ts里直接引用了NativeStorage,那肯定会报错,因为此时Cordova还没初始化完成,必须把相关代码移到
platform.ready()之后。
3. 修正类型声明与访问方式
虽然你已经把NativeStorage声明为any,但还是要注意访问方式:
- 如果是直接用原生Cordova插件,要确保通过
window对象访问,并且添加类型声明:declare var window: any; // 在platform ready之后 if (window.NativeStorage) { // 执行存储操作 } - 如果用Ionic Native的封装,要正确导入并注入,不要直接用全局变量:
import { NativeStorage } from '@ionic-native/native-storage'; import { Injectable } from '@angular/core'; @Injectable() export class YourService { constructor(private nativeStorage: NativeStorage) {} saveData() { this.platform.ready().then(() => { this.nativeStorage.setItem('user', {name: 'Jim'}) .then(() => console.log('存储成功'), error => console.error('存储失败', error)); }); } }
4. 清理缓存并彻底重建项目
旧项目的缓存经常会导致插件加载异常,试试彻底清理后重建:
- 删除以下文件夹:
rm -rf platforms plugins node_modules - 重新安装依赖:
npm install - 重新添加iOS平台和插件:
ionic cordova platform add ios ionic cordova plugin add cordova-plugin-nativestorage - 最后构建iOS项目:
ionic cordova build ios
5. 检查版本兼容性
你的Cordova 6.5版本比较老,和Ionic 3.20.0可能存在兼容性问题,试试升级到更匹配的版本:
- 升级Cordova到8.x版本(Ionic 3的稳定搭配):
npm install -g cordova@8 - 然后重新添加兼容的iOS平台版本:
ionic cordova platform rm ios ionic cordova platform add ios@4.5.5
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

