Cordova error: Using "requireCordovaModule" to load non-cordova module "q" is not supported
Cordova error: Using "requireCordovaModule" to load non-cordova module "q" is not supported
我注意到 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 依赖并使用原生 Promises
- 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 个,但是当发生这种情况时构建并没有停止。
然后我 运行 再次构建旧提交,它工作正常,可能是因为缓存了一些层。但是如果我只更改了一个包(我更新了 prettier 来尝试一下),它会导致大部分层被重建并且构建因上述错误而崩溃。
似乎某些更深层次的依赖项以某种方式得到了更新,这是导致问题的原因。
感谢您的帮助。
我已经回到之前的版本:8.1.2。
npm install -g cordova@8.1.2
现在,它又开始工作了。
如果您想继续使用最新版本的 cordova,请转到以下说明:
我运行成这个也。就我而言,我需要删除一个有问题的插件 cordova-plugin-camera-preview
,它将 "cordova": "*"
列为依赖项。这将在 ionic cordova build
期间安装 cordova 9.0.0
似乎是 cordova 9.0.0 的问题,请参阅此 issue ticket。
看起来它已经修复并将包含在下一个(9.0.1?)版本中。
我在更新到 9.0.0 后也遇到了这个错误。就我而言,我修复了它并进行了清理并重建了我的应用程序。您可以尝试以下步骤。
首先
- 更新科尔多瓦:
npm install -g cordova
- 更新 SDK,例如:
./android/tools/bin/sdkmanager "build-tools;28.0.3" "platforms;android-28"
- 将 SDK 路径添加到您的系统 (1),例如:在 bashrc
export ANDROID_SDK_ROOT=~/android
(1) ANDROID_HOME 已弃用但仍然有效
在您的 Cordova 项目中
- 删除node_modules、平台和插件文件夹
- 删除package.json和package-lock.json
- 从 config.xml 中删除 plugins/platforms/engine
- 添加您的平台,例如:
cordova platform add android
- 添加更新的插件,例如:
cordova plugin add cordova-plugin-whitelist
- 例如:
npm install
- 构建:
cordova build
您可以通过以下方式查看您的应用简历:cordova info
如果您想查看您的插件列表,您可以使用:cordova plugins ls
希望这能有所帮助,或者至少能为某人指明正确的方向:)
删除 cordova-plugin-crosswalk-webview
这个解决方案对我有用 - 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
编辑:我最近发现 运行ning:
cordova platform add ios && cordova platform add android
不会 安装最新版本,有人会很好地解释为什么这与 运行 单独安装它们不同,但这是我的问题。
这对我有用:
我通过调用
删除了 cordova
npm uninstall cordova -g
然后使用
再次全局安装它
npm install -g cordova@8.1.1
简单:
将 requireCordovaModule 替换为要求:
requireCordovaModule("q") 到 require("q")
我遇到了同样的问题。
我就是这样解决我的问题的:
cordova plugin | awk '{ print "cordova plugin rm " " && cordova plugin add " }' | 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。转到 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;
这里有一个查找 requireCordovaModule
存在位置的小技巧:
对于那些希望将 requireCordovaModule
更改为 require
的人,我发现使用以下命令可以轻松地从命令行直接搜索 requireCordovaModule
文本:
grep -r 'requireCordovaModule' ./
然后,您可以深入研究这些文件并将 requireCordovaModule
重命名为 require
。
在我的项目中遇到了同样的问题。
可以肯定的是函数 requireCordovaModule 没有被弃用(目前)
我使用 CI,但在管道中出现错误。许多表格建议将 cordova 降级到 8x(当我收到此错误时顺便更新到 9.0.0).. 它有效但再次降级永远不会好。
我在管道中的步骤之一是 ionic cordova build
,我将其替换为 ionic cordova run
无需任何代码更改即可运行
我注意到 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 依赖并使用原生 Promises
- 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 个,但是当发生这种情况时构建并没有停止。
然后我 运行 再次构建旧提交,它工作正常,可能是因为缓存了一些层。但是如果我只更改了一个包(我更新了 prettier 来尝试一下),它会导致大部分层被重建并且构建因上述错误而崩溃。
似乎某些更深层次的依赖项以某种方式得到了更新,这是导致问题的原因。
感谢您的帮助。
我已经回到之前的版本:8.1.2。
npm install -g cordova@8.1.2
现在,它又开始工作了。
如果您想继续使用最新版本的 cordova,请转到以下说明:
我运行成这个也。就我而言,我需要删除一个有问题的插件 cordova-plugin-camera-preview
,它将 "cordova": "*"
列为依赖项。这将在 ionic cordova build
似乎是 cordova 9.0.0 的问题,请参阅此 issue ticket。
看起来它已经修复并将包含在下一个(9.0.1?)版本中。
我在更新到 9.0.0 后也遇到了这个错误。就我而言,我修复了它并进行了清理并重建了我的应用程序。您可以尝试以下步骤。
首先
- 更新科尔多瓦:
npm install -g cordova
- 更新 SDK,例如:
./android/tools/bin/sdkmanager "build-tools;28.0.3" "platforms;android-28"
- 将 SDK 路径添加到您的系统 (1),例如:在 bashrc
export ANDROID_SDK_ROOT=~/android
(1) ANDROID_HOME 已弃用但仍然有效
在您的 Cordova 项目中
- 删除node_modules、平台和插件文件夹
- 删除package.json和package-lock.json
- 从 config.xml 中删除 plugins/platforms/engine
- 添加您的平台,例如:
cordova platform add android
- 添加更新的插件,例如:
cordova plugin add cordova-plugin-whitelist
- 例如:
npm install
- 构建:
cordova build
您可以通过以下方式查看您的应用简历:cordova info
如果您想查看您的插件列表,您可以使用:cordova plugins ls
希望这能有所帮助,或者至少能为某人指明正确的方向:)
删除 cordova-plugin-crosswalk-webview
这个解决方案对我有用 - 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
编辑:我最近发现 运行ning:
cordova platform add ios && cordova platform add android
不会 安装最新版本,有人会很好地解释为什么这与 运行 单独安装它们不同,但这是我的问题。
这对我有用: 我通过调用
删除了 cordovanpm uninstall cordova -g
然后使用
再次全局安装它npm install -g cordova@8.1.1
简单:
将 requireCordovaModule 替换为要求:
requireCordovaModule("q") 到 require("q")
我遇到了同样的问题。 我就是这样解决我的问题的:
cordova plugin | awk '{ print "cordova plugin rm " " && cordova plugin add " }' | 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。转到 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;
这里有一个查找 requireCordovaModule
存在位置的小技巧:
对于那些希望将 requireCordovaModule
更改为 require
的人,我发现使用以下命令可以轻松地从命令行直接搜索 requireCordovaModule
文本:
grep -r 'requireCordovaModule' ./
然后,您可以深入研究这些文件并将 requireCordovaModule
重命名为 require
。
在我的项目中遇到了同样的问题。
可以肯定的是函数 requireCordovaModule 没有被弃用(目前)
我使用 CI,但在管道中出现错误。许多表格建议将 cordova 降级到 8x(当我收到此错误时顺便更新到 9.0.0).. 它有效但再次降级永远不会好。
我在管道中的步骤之一是 ionic cordova build
,我将其替换为 ionic cordova run
无需任何代码更改即可运行