Cordova 错误: 不支持使用“ requCordovaModule”加载非 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 上。

经过深入调查,我发现 科尔多瓦9.0是最近发布的。

与此问题相关的一些更改。

  • GH-710滴 Q 依赖和使用本地承诺
  • GH-707不推荐使用非 Cordova 模块所需的 Cordova 模块

我的第一个想法是,我们没有锁定我们的科尔多瓦版本,但我们确实锁定到 cordova@8.1.2在我们的 dockerfile。我也测试了它在我的本地机器和我科尔多瓦版本 8.1.2以及。所以这不是问题所在。

在查看了一些日志之后,我注意到了一些类似这样的日志:

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

有一对夫妇,像3或4,但建设没有停止时,发生了。

然后我再次运行了一个旧提交的构建,它工作得很好,可能是因为缓存了一些层。但是,如果我只改变了一个包(我更新了更漂亮的尝试) ,它导致大多数层重建和构建崩溃与上述错误。

似乎某些更深层次的依赖关系被更新了,从而导致了这个问题。

谢谢你的帮助。

89592 次浏览

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

Npm install-g cordova@8.1.2

现在,它又起作用了。

如果你想继续阅读 Cordova 的最新版本,请按照以下说明:

我也遇到了这个。在我的例子中,我需要删除一个有问题的插件 cordova-plugin-camera-preview,它将 "cordova": "*"列为一个依赖项。这将在 ionic cordova build期间安装 cordova 9.0.0

似乎是科尔多瓦9.0.0的一个问题,看看这个 发票

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

在更新到 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 已被弃用,但仍然可以工作

在你的科尔多瓦项目中

  1. 删除 Node _ module平台插件文件夹
  2. 删除 包裹 Json包裹锁定 Json
  3. Xml插件/平台/引擎中删除
  4. 添加您的平台,例如: cordova platform add android
  5. 添加你的插件更新,例如: cordova plugin add cordova-plugin-whitelist
  6. 例: npm install
  7. 构造: cordova build

你可以用 cordova info查看你的应用程序的简历

如果你想看到你的插件列表,你可以使用: cordova plugins ls

希望这个能帮上忙,或者至少给某人指点一下正确的方向:)

删除 Cordova-plugin-Croswalk-webview

这个解决方案对我很有效

对于与此错误相关的任何插件,运行:

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

编辑: 我最近发现跑步:

cordova platform add ios && cordova platform add android

如果 没有能够安装最新的版本,如果有人能够解释一下为什么这与单独运行它们不同,那就再好不过了,但这是我的问题。

这就是对我有效的方法: 我打电话去除了 Cordova

npm uninstall cordova -g

然后在全球范围内安装

npm install -g cordova@latest

简单:

将需要的 CordovaModule 替换为需要:

RequCordovaModule (“ q”) to < strong > demand (“ q”)

我也有同样的问题。 我就是这样解决我的问题的:

cordova plugin | awk '{ print "cordova plugin rm " $1 " && cordova plugin add " $1 }' | sh
ionic cordova remove android && ionic cordova add android

C: Windows System32 我的 PATH 变量来修复这个奇怪的问题。

就是这个,我找到了。 它来自对 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

我可以把 Cordova 降级到 8.1.1来解决这个问题。

npm remove cordova -g && npm install -g cordova@8.1.1

正如错误所说,您需要使用 q.Go 到 npmInstall.js (在项目中搜索必需的 CordovaModule,然后您将看到 npmInstall.js)。

然后,添加这些行;

var q = require('q');
var npmModule = require('npm');

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

var Q = context.q;

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

var npm = context.npmModule;

这里有一个寻找 requireCordovaModule存在位置的小技巧:

对于那些希望将 requireCordovaModule更改为 require的人,我发现通过使用以下命令可以很容易地从命令行直接搜索 requireCordovaModule文本:

grep -r 'requireCordovaModule' ./

然后,您可以钻入这些文件并将 requireCordovaModule重命名为 require

我的项目也有同样的问题。

有一点可以肯定的是,函数 要求科尔多瓦模块目前还没有被弃用

我使用 CI,在管道中它会出错。许多表单建议将 cordova 降级为8倍(当我得到这个错误时,BTW 更新为9.0)。.这是有效的,但降级从来都不是好事。

管道中的一个步骤是 ionic cordova build,我用 ionic cordova run代替了它 不需要修改代码就可以工作