Ionic V4 — Build Prod «Не удалось найти cordova.js тег скрипта. Загрузка плагина может завершиться неудачей «.

#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