离子 V4 - 构建产品"Could not find cordova.js script tag. Plugin loading may fail."



在 Ionic v4 中,当我在生产模式下运行捆绑的应用程序(ionic cordovabuild android --prod)时,控制台说"找不到 cordova.js脚本标签。插件加载可能会失败",并且应用程序的某些内容(例如字体)已卸载(我看到的是 Roboto 字体而不是我的自定义字体)。否则,当我尝试在没有生产模式的情况下进行编译**(离子科尔多瓦构建安卓)**时,该应用程序运行时没有控制台错误。

我的离子信息:

离子(离子 CLI) : 4.12.0 离子框架 : @ionic/角度 4.2.0 @angular-devkit/build-angular : 0.13.8 @angular开发套件/原理图:7.2.4 @angular/命令行界面 : 7.3.8 @ionic/角度工具包:1.4.1

科尔多瓦:

科尔多瓦(科尔多瓦 CLI) : 8.1.2 (科尔多瓦-lib@8.1.1) 科尔多瓦平台:安卓7.1.4 科尔多瓦插件:科尔多瓦插件离子键盘 2.1.3,科尔多瓦插件离子网络视图 3.1.2,(和其他 7 个插件)

有人也面临这个问题吗?

干杯

在开发环境中,地址是cordova.js并且找到了文件。 在 prod 中,文件名被散列成类似 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;
}

通过设置"optimization": false"outputHashing": "none"进行angular.json配置临时修复:

"configurations": {
"production": {
...
"optimization": false,
"outputHashing": "none",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
...
},
...
}

当我从离子 3 迁移到离子 4 时,我遇到了同样的问题。在我开始一个新项目(默认选项卡)并复制代码后,它消失了。

似乎有人找到了解决方案:

我不再有这个问题了。在angular.json中,我设置了buildOptimizer 和 AoT 到假,然后我能够使用 --prod 构建。当我 已重新激活 AoT,我在日志中看到问题。依赖关系 在迁移过程中,注入的方式是错误的。 来源: Github

最新更新