科尔多瓦错误:不支持使用“ requireCordovaModule”加载非科尔多瓦模块“ q”

And*_*ann 53 cordova cordova-plugins

我注意到由于以下错误,我们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
Run Code Online (Sandbox Code Playgroud)

在iOS和Android上都发生相同的问题。

经过一番挖掘,我发现cordova 9.0.0是最近发布的。

有几个与此问题相关的更改。

  • GH-710 Drop Q依赖性并使用本机承诺
  • GH-707为非Cordova模块弃用requireCordovaModule

我的第一个想法是,某种程度上我们没有锁定cordova版本,但是我们确实将其锁定到cordova@8.1.2了dockerfile中。我也在本地计算机和Cordova版本上进行了测试8.1.2。所以这不是问题。

在查看了更多日志之后,我注意到了一些类似以下的日志:

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

其中有几个,例如3或4,但是在这种情况发生时构建并没有停止。

然后,我再次运行了较早的提交的构建,并且运行良好,可能是因为缓存了某些层。但是,如果我只更改了一个程序包(我更新了漂亮的程序包以进行尝试),则会导致大多数层被重建,并且构建因上述错误而崩溃。

似乎某种程度上更深层的依赖关系已更新,这导致了问题。

谢谢你的帮助。

Or *_*ban 84

我回到了以前的版本:8.1.2。

npm install -g cordova@8.1.2

现在,它又开始工作了。

  • 这不是解决方案,而是一种解决方法。它为我工作。猜猜我们必须等到cordova开发人员对其进行修复。 (4认同)
  • 这对我不起作用,我已经安装了cordova 8.1.2,但仍然出现错误。 (3认同)
  • 那对我有用。谢谢。另外,请注意其他事项,如果您删除了cordova平台,请确保将cordova平台添加到适合您的版本。 (2认同)

Khu*_*ari 14

简单的:

将 requireCordovaModule 替换为 require :

requireCordovaModule("q")require("q")

  • 在哪里替换这个?在哪个文件? (3认同)

Alo*_*mon 11

我可以通过将cordova降级到8.1.1.

npm remove cordova -g && npm install -g cordova@8.1.1
Run Code Online (Sandbox Code Playgroud)


Max*_*Max 10

这个解决方案对我有用- 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
Run Code Online (Sandbox Code Playgroud)

编辑:我最近发现运行:

cordova platform add ios && cordova platform add android
Run Code Online (Sandbox Code Playgroud)

安装最新版本,将是很好的人解释为什么这是seperately运行它们的不同,但是这是我的问题。


Dom*_*nic 7

似乎是cordova 9.0.0的问题,请参阅此问题票证

看起来它已经修复,将包含在下一个(9.0.1?)版本中。

  • 回滚到“ 8.1.2”对我有用 (3认同)

Or *_*ban 7

就是这样,我找到了。它来自对cordova cli @9.0.0 的更新,并附加在现有项目上。
该问题来自cordova-android-support-gradle-release,并在最新版本中修复。

所以无论如何,你需要做的是:
cordova plugin rm cordova-android-support-gradle-release
cordova plugin add cordova-android-support-gradle-release@latest


小智 6

我也遇到了这个。就我而言,我需要删除一个有问题的插件cordova-plugin-camera-preview,该插件"cordova": "*"列为依赖项。这将在安装过程中安装cordova 9.0.0ionic cordova build

  • 尽管对大多数人来说修复只是简单地降级到 8.1.2,但我在问题中明确指出我已将我的cordova 版本修复到 8.1.2,但它仍然无法正常工作。原因是相机预览插件和 ionic 的一些奇怪组合,它基本上只是忽略了定义的cordova 版本,不管怎样只使用 9.0.0。所以事实证明,在我的具体情况下,它与这个问题完全相关,这就是为什么这是公认的答案。 (2认同)

gen*_*gns 6

更新到9.0.0后,我也收到此错误。在我的情况下,我修复了它并进行了清理并重建了我的应用程序。您可以尝试以下步骤。

首先

  1. 更新科尔多瓦: 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_modulesplatformsplugins文件夹
  2. 删除package.jsonpackage-lock.json
  3. config.xml plugins/platforms/engine 中删除
  4. 添加您的平台,例如: cordova platform add android
  5. 添加更新的插件,例如: cordova plugin add cordova-plugin-whitelist
  6. 前任: npm install
  7. 建造: cordova build

您可以通过以下方式查看应用的简历: cordova info

如果您想查看插件列表,可以使用: cordova plugins ls

希望这会有所帮助,或者至少为某人指明正确的方向:)


erd*_*enc 5

正如错误所示,您需要要求 q。转到 npmInstall.js (在项目中搜索 requireCordovaModule 然后您将看到 npmInstall.js )。

然后,添加这些行;

var q = require('q');
var npmModule = require('npm');
Run Code Online (Sandbox Code Playgroud)

并替换:var Q = context.requireCordovaModule('q');

var Q = context.q;
Run Code Online (Sandbox Code Playgroud)

并替换:var npm = context.requireCordovaModule('npm');

var npm = context.npmModule;
Run Code Online (Sandbox Code Playgroud)