如何删除 cordova-plugin-compat?

How to remove cordova-plugin-compat?

在 cordova-android 6.3.0 (https://cordova.apache.org/announcements/2017/09/27/android-release.html) 的发行说明中写到 cordova-plugin-compat 必须被删除

如果我尝试

cordova plugin rm cordova-plugin-compat

我收到以下错误

[ERROR] An error occurred while running cordova plugin remove cordova-plugin-compat --save (exit code 1):

Error: The plugin ‘cordova-plugin-compat’ is required by (cordova-plugin-calendar, cordova-plugin-camera, cordova-plugin-file, cordova-plugin-geolocation), skipping uninstallation. (try --force if trying to update)

如果我随后尝试 --force 删除,它会起作用,插件已删除,我可以构建我的 android 应用程序。

但是,我刚刚删除了我的 iOS 平台以再次添加它,但我现在面临错误

cordova prepare ios Error: Cannot find plugin.xml for plugin "cordova-plugin-compat". Please try adding it again.

[ERROR] An error occurred while running cordova prepare ios (exit code 1).

知道我做错了什么吗?真的应该删除 cordova-plugin-compat 吗?为什么我的 iOS 平台引用了它,我以为它只适用于 android?

我使用 cordova-android@6.3.0 和 cordova-ios@4.5.1

P.S.: 如果我删除并添加 iOS 平台,compat 插件会自动添加为 package.json 和 package-lock.json[=22 中的参考=]

更新

最后一个插件版本 (https://cordova.apache.org/news/2017/11/10/plugins-release.html) 很可能分别解决了这个问题,看起来问题是从其他插件引用了 cordova-plugin-compat 插件。但是,

我还不能完全测试并解决它,因为我正在使用另一个插件,其中也引用了 compat (https://github.com/EddyVerbruggen/Calendar-PhoneGap-Plugin/issues/426)。

我将保持此线程打开,直到我可以 100% 确认这解决了 compat 的引用问题。

最终更新

删除从 Calendar-PhoneGap-Plugin 到‘cordova-plugin-compat’ 的依赖关系的 PR 通过了,我能够在没有 "force"

的情况下删除最后一个插件

cordova-plugin-compat 仅适用于 Android,因此它不会导致 iOS 出错。我建议尝试清理您的 Cordova 项目。

删除以下目录:插件、平台,node_modules。它们将被重新创建

然后执行:

cordova platform add android
cordova platform add ios
cordova prepare # usually made by commands above but juste in case
cordova compile

您可能有另一个插件需要兼容插件。为此,请检查您的插件 package.json。

我和 cordova-plugin-file 有同样的问题,现在有解决方案吗?

https://forum.ionicframework.com/t/cordova-plugin-file-cordova-android-6-3-0-build-error/110682

对我来说,修复的是通过 Android Studio 更新 Android SDK,然后 运行:

cordova plugin rm cordova-plugin-compat --force
cordova platform rm android
cordova platform add android@6.3.0

希望对某人有所帮助!

问题的根源是插件直接引用 cordova-plugin-compat

因此,即使不推荐使用该插件,仍然需要它。强制删除(使用 --force)不是解决方案,因为如果我删除并再次添加平台,那么,由于这些引用,插件“cordova-plugin-compat”会在该过程中再次自动添加。

然后问题的解决方法就是等待新版本或者提交PR去除依赖。

在我的例子中,有一些插件引用了 cordova-plugin-compat:

Error: The plugin ‘cordova-plugin-compat’ is required by (cordova-plugin-calendar, cordova-plugin-camera, cordova-plugin-file, cordova-plugin-geolocation), skipping uninstallation. (try --force if trying to update)

更新以下插件解决了我的问题:

cordova-plugin-camera@3.0.0cordova-plugin-file@5.0.0cordova-plugin-geolocation@3.0.0 删除了依赖项(参见 https://cordova.apache.org/news/2017/11/10/plugins-release.html

cordova-plugin-calendar@5.0.0 通过这个 PR 移除了依赖 https://github.com/EddyVerbruggen/Calendar-PhoneGap-Plugin/pull/430

删除早于 1.2 版的插件兼容性

$ cordova plugin rm cordova-plugin-compat --force

然后添加版本 1.2

$ cordova plugin add cordova-plugin-compat@1.2

这对我来说效果很好!