Ошибка Cordova: использование "requireCordovaModule" для загрузки модуля non-cordova "q" не поддерживается

Я заметил, что сборки нашего CI начали давать сбой из-за следующей ошибки:

Discovered plugin "cordova-plugin-app-version" in config.xml. Adding it to the project

Installing "cordova-plugin-app-version" for android

Adding cordova-plugin-app-version to package.json
Using "requireCordovaModule" to load non-cordova module "q" is not supported. Instead, add this module to your dependencies and use regular "require" to load it.
[ERROR] Exception: 
The command '/bin/sh -c ionic cordova platforms add android' returned a non-zero code: 1

Та же проблема возникает как на iOS, так и на Android.

После некоторых копаний я обнаружил, что недавно была выпущена Cordova 9.0.0.

Есть несколько изменений, связанных с этой проблемой.

  • GH-710 Отбросьте зависимость Q и используйте собственные обещания
  • GH-707 Устаревать requireCordovaModule для не-Cordova модулей

Моей первой мыслью было, что почему-то у нас не было заблокированной версии Cordova, но мы заблокировали ее по [email protected] в нашем файле Docker. Я также проверил это на моей локальной машине, и я Cordova версии 8.1.2 а также. Так что это не может быть проблемой.

Посмотрев еще несколько журналов, я заметил несколько таких журналов:

cordova-android version check failed ("/app/platforms/android/cordova/version"), continuing anyways.

Было несколько таких, как 3 или 4, но сборка не остановилась, когда это произошло.

Затем я снова запустил сборку старого коммита, и он работал нормально, возможно потому, что некоторые слои были кэшированы. Но если я изменил только один пакет (я обновил более красивый, чтобы попробовать его), это привело к перестроению большинства слоев, и сборка завершилась с ошибкой, описанной выше.

Кажется, что каким-то образом обновились некоторые зависимости, которые вызывают проблему.

Спасибо за вашу помощь.

Ответы

Ответ 1

Я столкнулся с этим также. В моем случае мне нужно было удалить проблемный плагин cordova-plugin-camera-preview котором в качестве зависимости указано "cordova": "*". Это позволит установить Cordova 9.0.0 во ionic cordova build

Ответ 2

Я вернулся к предыдущей версии: 8.1.2.

npm install -g [email protected]

Теперь это снова работает.

Ответ 3

Кажется, проблема с cordova 9.0.0, см. этот запрос на выпуск.

Похоже, что это уже исправлено и будет включено в следующую (9.0.1?) Версию.

Ответ 4

Я также получаю эту ошибку после обновления до 9.0.0. В моем случае я исправил это, выполняя очистку и перестраивая мое приложение. Вы можете попробовать следующие шаги.

Прежде всего

  1. Обновление Cordova: npm install -g cordova
  2. Обновите SDK, например: ./android/tools/bin/sdkmanager "build-tools;28.0.3" "platforms;android-28"
  3. Добавьте путь SDK к вашей системе (1), например: в bashrc export ANDROID_SDK_ROOT=~/android

(1) ANDROID_HOME устарел, но все еще работает

В вашем проекте Cordova

  1. Удалить node_modules, платформы и плагины папок
  2. Удалите package.json и package-lock.json
  3. Удалить из config.xml плагины/платформы/движок
  4. Добавьте свою платформу, например: cordova platform add android
  5. Добавляйте обновленные плагины, например: cordova plugin add cordova-plugin-whitelist
  6. Сборка: cordova build

Вы можете проверить резюме вашего приложения с помощью: cordova info

Если вы хотите увидеть список ваших плагинов, вы можете использовать: cordova plugins ls

Надеюсь, что это поможет или, по крайней мере, указать кому-то в правильном направлении :)

Ответ 5

Это решение работало для меня - https://github.com/xpbrew/cordova-sqlite-storage/issues/856#issuecomment-497298630

Для любого плагина, с которым связана эта ошибка, запустите:

cordova platform rm ios
cordova platform rm android
cordova plugin rm <package-name>

npm i <package-name>@latest
cordova plugin add <package-name>
cordova platform add ios
cordova platform add android

Ответ 6

Вот что сработало для меня: Я удалил Кордову, позвонив

npm uninstall cordova -g

а затем снова установил его глобально с помощью

npm install -g [email protected]

Ответ 7

Просто:

Замените requireCordovaModule, чтобы требовать:

requireCordovaModule ("q") от до require ("q")

Ответ 8

удалить cordova-plugin-crosswalk-webview