在Ionic v4中,当我运行以生产模式(ionic cordova build android --prod)捆绑销售的应用程序时,控制台会说“找不到cordova.js脚本标记。插件加载可能会失败。应用程序的某些内容(如字体)将被卸载(我看到的是Roboto Font,而不是我的自定义字体)。否则,当我尝试不使用生产模式进行编译**(离子Cordova构建android)**时,该应用程序运行时没有控制台错误。
我的离子信息:
离子(离子CLI):4.12.0 离子框架:@ ionic / angular 4.2.0 @ angular-devkit / build-angular:0.13.8 @ angular-devkit / schematics:7.2.4 @ angular / cli:7.3.8 @ ionic / angular-toolkit:1.4.1科尔多瓦:
cordova(Cordova CLI):8.1.2(cordova-lib@8.1.1) Cordova平台:Android 7.1.4 Cordova插件:cordova-plugin-ionic-keyboard 2.1.3,cordova-plugin-ionic-webview 3.1.2(和其他7个插件)
有人也面临这个问题吗?
干杯
答案 0 :(得分:1)
当我从ionic 3迁移到ionic 4时,我遇到了同样的问题。当我开始一个新的项目(默认为选项卡)并复制代码后,它消失了。
似乎有人找到了解决方法:
我不再有这个问题。在angular.json中,我设置了buildOptimizer 并且AoT为false,那么我就可以使用--prod进行构建。当我 重新激活AoT,我在日志中看到了问题。依赖 在迁移过程中,注入的方式是错误的。 来源:Github
答案 1 :(得分:0)
在开发环境中,地址为cordova.js并找到了文件。 在产品中,文件名被散列到诸如cordova.4bdae3fd4f9978d7dcd8.js之类的文件中。
因此,您需要将函数findCordovaPath()修改为
function findCordovaPath () {
var path = null;
var scripts = document.getElementsByTagName('script');
var startterm = '/cordova.';
var term = '/cordova.js';
for (var n = scripts.length - 1; n > -1; n--) {
var src = scripts[n].src.replace(/?.*$/, ''); // Strip any query param CB-6007).
var idx = src.indexOf(startterm);
if (idx >= 0){
term = src.substring(idx+1);
}
if (src.indexOf(term) === (src.length - term.length)) {
path = src.substring(0, src.length - term.length) + '/';
break;
}
}
return path;
}
答案 2 :(得分:0)
通过设置angular.json
和"optimization": false
通过"outputHashing": "none"
配置进行临时修复:
"configurations": {
"production": {
...
"optimization": false,
"outputHashing": "none",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
...
},
...
}