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

时间:2019-03-22 16:33:48

标签: 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

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

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

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

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

我的第一个想法是,由于某种原因,我们并未锁定cordova版本,但确实将其锁定到了dockerfile中的cordova@8.1.2。我也在本地计算机上测试了它,并且我的cordova版本为8.1.2。所以这不是问题。

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

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

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

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

似乎某些更深层次的依赖关系已经更新,这导致了问题。

感谢您的帮助。

15 个答案:

答案 0 :(得分:45)

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

  

npm install -g cordova@8.1.2

现在,它又可以工作了。

答案 1 :(得分:6)

我可以通过将cordova降级为8.1.1来解决此问题。

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

答案 2 :(得分:3)

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

期间安装cordova 9.0.0。

答案 3 :(得分:3)

似乎是cordova 9.0.0的问题,请参阅此issue ticket

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

答案 4 :(得分:3)

这对我有用: 我通过致电

删除了科尔多瓦
npm uninstall cordova -g

,然后使用

重新在全局安装
npm install -g cordova@8.1.1

答案 5 :(得分:3)

简单:

将requireCordovaModule替换为require:

requireCordovaModule(“ q”) require(“ q”)

答案 6 :(得分:3)

如错误所示,您需要输入q。转到npmInstall.js(在项目中搜索requireCordovaModule,然后您将看到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;

答案 7 :(得分:2)

更新为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

希望获得帮助,或者至少将某人指向正确的方向:)

答案 8 :(得分:0)

删除cordova-plugin-crosswalk-webview

答案 9 :(得分:0)

此解决方案对我有用-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

答案 10 :(得分:0)

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

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

答案 11 :(得分:0)

C:\ Windows \ System32 修复我的PATH变量。

答案 12 :(得分:0)

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

因此,无论如何,您需要做的是:
Microsoft.UI.Xaml
cordova plugin rm cordova-android-support-gradle-release

答案 13 :(得分:0)

以下是寻找requireCordovaModule存在的地方的小提示:

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

grep -r 'requireCordovaModule' ./

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

答案 14 :(得分:0)

在我的项目中遇到了同样的问题。

可以肯定的是,requireCordovaModule 函数没有被弃用(目前)

我使用 CI,在管道中它给出了错误。许多表格建议将cordova降级到8x(顺便说一句,当我收到此错误时更新到9.0.0)..它可以工作,但再次降级永远不会好。

我在管道中的步骤之一是 ionic cordova build,我将其替换为 ionic cordova run 无需任何代码更改即可运行