我注意到由于以下错误,我们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最近被发布了。
与此问题相关的一些更改。
我的第一个想法是,由于某种原因,我们并未锁定cordova版本,但确实将其锁定到了dockerfile中的cordova@8.1.2
。我也在本地计算机上测试了它,并且我的cordova版本为8.1.2
。所以这不是问题。
查看了更多日志后,我注意到了一些类似以下的日志:
cordova-android version check failed ("/app/platforms/android/cordova/version"), continuing anyways.
其中有一些,例如3或4,但是在这种情况发生时构建并没有停止。
然后我再次运行了较早的提交的构建,并且运行良好,可能是因为缓存了某些层。但是,如果我只更改了一个程序包(我更新了漂亮的程序包进行尝试),则会导致大多数层被重建,并且构建因上述错误而崩溃。
似乎某些更深层次的依赖关系已经更新,这导致了问题。
感谢您的帮助。
答案 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
答案 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后,我也收到此错误。就我而言,我修复了它进行清理并重建我的应用程序。您可以尝试执行以下步骤。
npm install -g cordova
./android/tools/bin/sdkmanager "build-tools;28.0.3" "platforms;android-28"
export ANDROID_SDK_ROOT=~/android
中(1)不建议使用ANDROID_HOME,但仍可以使用
cordova platform add android
cordova plugin add cordova-plugin-whitelist
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
无需任何代码更改即可运行