从项目中移除cordova插件

117
在我的应用程序中,一些 Cordova 插件被安装了,因此需要访问几乎所有内容 - 从我的联系人到当前位置(即使这个应用程序不需要)。据我所知,通过 Jenkins 构建此应用程序的一个解决方案是使用单个命令删除每个插件,这将像下面这样:

在我的应用程序中,安装了许多 Cordova 插件,这导致它需要访问几乎所有内容——从我的联系人到当前位置(尽管此应用程序并不需要这些权限)。

我理解,通过 Jenkins 构建此应用程序的一个解决方案是使用单个命令删除每个插件,所以命令如下:

cordova plugin rm org.apache.cordova.battery-status
cordova plugin rm org.apache.cordova.camera
cordova plugin rm org.apache.cordova.contacts
cordova plugin rm org.apache.cordova.geolocation
cordova plugin rm org.apache.cordova.media
cordova plugin rm org.apache.cordova.media-capture
cordova plugin rm org.apache.cordova.splashscreen
cordova plugin rm org.apache.cordova.vibration

但有时它会显示一些错误,并且在jenkins中,任何错误都会导致构建失败,因此是否有任何命令可以删除所有插件?(在安装基本插件期间,需要任何应用程序才能正常工作的插件会自动通过cordova添加,因此我正在寻找一些cordova plugin rm -all 但找不到)


1
我建议编写一个Shell脚本,调用 cordovaplugin list 命令,然后对返回的每一行执行 cordova plugin rm 命令。 - QuickFix
我只能通过makefile做那样的事情。而且我对Unix命令行也不是很熟练。 - mmmm
你可以尝试在Cordova项目中提出请求,要求他们添加一个命令来移除所有插件... - QuickFix
是啊,我没有那么多时间等待他们为我添加一个新的命令。 - mmmm
15个回答

277

首先,您应该列出您的插件:

cordova plugin list

有了这个结果,你可以简单地执行:

cordova plugin remove <PLUGIN_NAME>
例如:
cordova plugin remove org.apache.cordova.media

由于某些原因,我的VS2013项目没有列出任何内容,而且删除也无法正常工作。只好采用老式的config.xml编辑和插件文件夹删除方法... - Anthony Horne
8
那个人要求一次性删除所有内容的命令。这是一个简单的已记录回答,只能一次删除一个。 - Imon
8
建议执行 cordova plugin remove <PLUGIN_NAME> --save 命令,这样插件就会自动从 config.xml 文件中删除。 - kamayd

21
你也可以使用bash完成这个任务(在切换到Cordova项目目录后):
for i in `cordova plugin ls | grep '^[^ ]*' -o`; do cordova plugin rm $i; done

你测试过了吗? - Hamid Araghi

14

通常我会从终端(OSX)使用以下命令:

cordova plugin -l | xargs cordova plugins rm

管道,管道一切!

稍作解释:此命令将循环遍历cordova plugin -l的结果,并将其提供给cordova plugins rm

xargs是那些你想知道为什么之前不知道的命令之一。看看这个教程。


1
从 Cordova 9.0.0 开始,这个功能不再起作用了,但 JVE999 的可以正常使用。 - Bala Clark
不像我预期的那样工作,但比写所有这些插件的名称要好。我必须运行与插件数量相同的次数的命令。每个插件都需要一次,但它总是相同的命令,所以我只需按上箭头并多次点击回车键即可。感谢修复 ;) - Inês Borges

11
您可以使用以下命令: cordova插件列表 | awk '{print $1}' | xargs cordova插件删除

并使用cordova插件列表命令验证插件是否已被全部删除。

没有起作用。出现以下错误: 错误:插件“{}”不存在于项目中。请参见 \cordova plugin list`` - tim-montague
1
@tfmontague 请尝试手动执行 cordova plugins ls 命令,然后使用 cordova plugins rm plugin_name 命令逐个删除插件。从错误信息来看,似乎有一个插件在您的项目中不存在。使用这种方法,您可以找到该插件。 - Hamid Tavakoli

10

cordova-check-plugins的v2.0.0版本使您可以删除项目中的所有插件:

$ npm install -g cordova-check-plugins
$ cordova-check-plugins --remove-all

它将尝试使用Cordova CLI来删除每个插件,但如果失败了,它将强制从platforms/plugins/中删除该插件。

如果您还想从config.xml中删除,请使用:

$ cordova-check-plugins --remove-all --save

免责声明:我是cordova-check-plugins的作者


$cordova-check-plugins --remove-all --save 正在移除所有插件... - 致命错误:列出已安装的插件时未能找到本地/全局cordova或全局phonegap CLI命令 - 请确保您在项目文件夹中本地安装了cordova npm模块或全局安装。错误:命令失败:phonegap -v “phonegap”不是内部或外部命令,也不是可运行的程序或批处理文件。 - Naga
@Naga,你需要在全局npm目录中安装cordova或phonegap,该目录由默认前缀npm配置变量或您在.npmrc / npmrc文件中设置的任何内容指定。如果您正在Windows上运行,则大多数情况下在C:\ Users \ yourusername \ AppData \ Roaming \ npm中,在UNIX内核上则在/ usr / local中。您可以通过在终端/命令中键入“npm config get prefix”来查找前缀。 - rolling_codes

4
我用这个Python一行代码实现:

我用这个Python一行代码实现:

python -c "import subprocess as sp;[sp.call('cordova plugin rm ' + p.split()[0], shell=True) for p in sp.check_output('cordova plugin', shell=True).split('\n') if p]"

显然,它不能处理任何错误情况,但它能完成任务。

1
只需使用一个shell脚本。将另一种带有自己依赖项的编程语言混合在一起,会使Cordova变得更加混乱。 - tim-montague

4
cordova platform rm android

cordova plugin rm cordova-plugin-firebase

cordova platform add android

1
请在您的回答中添加一些上下文或解释。 - Joey Phillips

3
据我所记,从Cordova开始,您应该在“res”文件夹中有一个包含项目中使用的插件列表的xml文件。您可能需要从列表中删除那些未使用的插件。同时,您还应该删除相关文件。

我无法物理访问这个从属设备。不能用这种方式完成。 - mmmm

2
这是用于在Cordova中删除插件的命令行: cordova plugin remove <pluginid> 例如,我运行了cordova plugin并获得了插件列表,然后使用插件的ID进行卸载: cordova plugin remove com.monday.contact-chooser 您可以通过输入以下命令来获取命令行帮助: cordova help <command>

移除 Cordova 插件 com.monday.contact-chooser 时出现错误 - 错误:项目中不存在插件“cordova-plugin-name”。请参见 cordova plugin list - S.Yadav
1
请删除您的帖子,所问的问题是“是否有任何命令可以删除所有插件”。 - tim-montague

1
基于处理已安装插件列表的脚本可能无法正常工作,因为已安装插件之间存在依赖关系(例如 cordova-plugin-file 和 cordova-plugin-file-transfer)。
在这个例子中,脚本将首先找到文件插件,然后尝试删除它,但由于 file-transfer 需要它,我们将会得到一个错误。因此,我们需要...

这是关于已安装插件之间依赖关系的一个好观点。我认为有一个强制标志 --force,它将删除插件,而不考虑依赖关系... - tim-montague

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接