#angular #cordova #ionic4
#angular #кордова #ionic4
Вопрос:
В Ionic v4, когда я запускаю приложение в комплекте в рабочем режиме (ionic cordova build android -prod), консоль сообщает «Не удалось найти cordova.js тег скрипта. Загрузка плагина может завершиться неудачей. ‘ и некоторые элементы приложения, такие как шрифты, выгружаются (я вижу шрифт Roboto, а не мой пользовательский шрифт). В противном случае, когда я пытаюсь скомпилировать без производственного режима ** (ionic cordova build android) **, приложение запускалось без ошибок консоли.
Моя информация об Ionic:
ionic (Ionic CLI): 4.12.0 Ionic Framework: @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 других плагинов)
Кто-нибудь также сталкивался с этой проблемой?
Приветствия,
Комментарии:
1. вы нашли какое-либо решение?
2. У меня та же проблема. Изучаю изменение index.html для ссылки
cordova.js
, не хэшируетсяcordova.sjhdfksjdhfks.js
3. @KirillGroshkov Как ты это сделал? Я не могу изменить index.html который находится в apk.
Ответ №1:
В среде разработки адрес 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;
}
Комментарии:
1. Не могли бы вы предоставить mroe информацию о том, как использовать эту функцию?
2. @Zahema: я заменил эту функцию в своем приложении Ionic в www/cordova.js . Существуют другие cordova.js некоторые файлы внутри приложения генерируются автоматически. В зависимости от различных платформ, которые вы создаете, вам, возможно, придется изменить эту функцию в нескольких местах.
3. Ваше решение выдало мне ошибку :
ERROR in cordova.8d2879086e40979e9c2d.js from Terser Invalid regular expression: /?.*$/: Nothing to repeat [cordova.8d2879086e40979e9c2d.js:1932,37] [ERROR] An error occurred while running subprocess ng.
4. @Kari Похоже, что регулярное выражение исключено
var src = scripts[n].src.replace(/?.*$/, '');
. Почему у вас по-другому? (ОС отличается?)5. @Marco Я только что проверил еще раз, и да, он действительно должен содержать обратную косую черту перед вопросительным знаком, убедившись, что она экранирована. Соответствующим образом изменю свой пост.
Ответ №2:
временно исправлено с помощью 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,
...
},
...
}
Комментарии:
1. Вышеуказанный обходной путь работает, но поскольку для оптимизации установлено значение false, размер выходного apk-файла будет выше (т. Е. Фактический размер apk без оптимизации).
2. Это отключит оптимизацию выходных данных сборки. Включая минимизацию скриптов и стилей, перетряхивание дерева, устранение мертвого кода, встраивание критического CSS и встраивание шрифтов.
Ответ №3:
У меня была такая же проблема, когда я переходил с ionic 3 на ionic 4. Он исчез после того, как я запустил новый проект (с вкладками по умолчанию) и скопировал код.
Кажется, кто-то нашел решение:
У меня больше нет этой проблемы. В angular.json я установил buildOptimizer и AoT в false, затем я смог выполнить сборку с помощью —prod. Когда я повторно активировал AoT, я вижу проблему в журнале. Внедрение зависимостей выполнялось неправильно во время миграции. Источник: Github