Ionic/Cordova应用首次构建插件加载失败,重建恢复问题咨询
问题场景
我正在开发一款Ionic/Cordova应用,碰到个头疼的问题:首次构建启动应用时,Device、File、NetworkStatus这些核心插件全都加载失败,但只要重新构建一次,插件就又能正常工作了。首次启动的报错信息如下:
2018-01-25 11:18:37.640001+0100 Admiral[6647:207621] ERROR: Plugin 'Device' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml.
2018-01-25 11:18:37.640121+0100 Admiral[6647:207621] -[CDVCommandQueue executePending] [Line 159] FAILED pluginJSON = ["Device1680548736","Device","getDeviceInfo",[]]
2018-01-25 11:18:37.640254+0100 Admiral[6647:207621] ERROR: Plugin 'File' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml.
2018-01-25 11:18:37.640362+0100 Admiral[6647:207621] -[CDVCommandQueue executePending] [Line 159] FAILED pluginJSON = ["File1680548737","File","requestAllPaths",[]]
2018-01-25 11:18:37.640482+0100 Admiral[6647:207621] ERROR: Plugin 'NetworkStatus' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml.
2018-01-25 11:18:37.640567+0100 Admiral[6647:207621] -[CDVCommandQueue executePending] [Line 159] FAILED pluginJSON = ["NetworkStatus1680548738","NetworkStatus","getConnectionInfo",[]]
排查与解决步骤
结合我自己踩过的坑,给你几个针对性的解决方案,按顺序试试:
清理构建缓存
Cordova的构建缓存经常会导致插件映射不完整的问题,先清理缓存再重新构建:ionic cordova clean # 或者直接用cordova命令 cordova clean清理完后执行
ionic cordova build ios(或安卓),再测试首次启动情况。确认插件安装与config.xml映射
先检查插件是否真的安装成功:cordova plugin list确保输出里有
cordova-plugin-device、cordova-plugin-file、cordova-plugin-network-information这几个插件。
然后打开config.xml,确认里面有正确的插件声明,比如:<plugin name="cordova-plugin-device" spec="^2.0.2" /> <plugin name="cordova-plugin-file" spec="^6.0.2" /> <plugin name="cordova-plugin-network-information" spec="^2.0.2" />注意NetworkStatus对应的插件ID是
cordova-plugin-network-information,别在映射里写错了。确保插件在deviceready后初始化
很多时候是应用启动太快,Cordova还没完成插件初始化就调用了插件方法,导致找不到插件。把所有插件相关的代码都放到deviceready事件回调里:document.addEventListener("deviceready", function() { console.log("Cordova环境已准备就绪"); // 在这里调用Device、File等插件的方法 navigator.device.getDeviceInfo(); // 其他插件操作... }, false);重新添加平台
如果上面的方法都没用,试试移除再重新添加平台,这样能彻底重置平台的构建配置:# 以iOS为例 ionic cordova platform remove ios ionic cordova platform add ios # 安卓同理 ionic cordova platform remove android ionic cordova platform add android添加完后再重新构建测试。
内容的提问来源于stack exchange,提问作者Indermohan Singh

