在一个命令中更新Cordova插件


124

我想知道有没有更简单的方法来更新cordova插件?

我用谷歌搜索,发现了一个钩子(@ 2013年),但这不是我想要的100%。

我知道我可以通过两个步骤来做到这一点:rm,然后添加,但我正在寻找一种更好的(官方)方法来帮助我哪些插件具有更新的版本?我可以用一个命令更新所有这些 (就像:npm更新)

例如:

$ cordova plugin list
/* list all installed plugins, their dependencies, and newer versions */

$ cordova plugin update
/* update all of them for me */

如果没有官方的方法,还有其他帮手吗?哟?


我不这么认为
AtanuCSE 2015年

这是一个执行此工作的bash脚本stackoverflow.com/a/36378949/5966317
nick.graziano

我走得更远,在ios项目文件夹中运行pod update
Jacksonkr,

Answers:


222

我已经厌倦了手动检查插件更新的麻烦,因此创建了一个为我做的工具:https : //github.com/dpa99c/cordova-check-plugins

全局安装:

$ npm install -g cordova-check-plugins

然后从您的Cordova项目的根目录运行。您可以选择交互式或自动更新过时的插件,例如

$ cordova-check-plugins --update=auto

CLI屏幕截图


运行第二行时出现错误:错误:插件:cordova-plugin-statusbar来源:npm:// cordova-plugin-statusbar安装版本:UNKNOWN-检查plugins / fetch.json中是否有孤立条目。远程版本:2.1.1如何解决?谢谢
Agnosco '16

@Agnosco,这意味着插件可能无法确定本地版本号,可能是因为rupture fetch.json。我建议手动删除并重新安装受影响的插件。
DaveAlden '16

棒极了 !可能的增强是增加在更新时为命令提供args的可能性,例如对于facebook插件,可能会自动更新而不会出现此问题Error: Variable(s) missing (use: --variable APP_ID=value --variable APP_NAME=value)
Jeremy Belolo,2013年

4
@JeremyBelolo cordova-check-plugins@1.1.4添加了对更新时保留变量的支持:-)
DaveAlden

1
@ Al-Mothafar您误解了为什么npm报告安全漏洞的目的。正如我在您打开问题中所述,npm报告的软件包漏洞在这里是无关紧要的,因为这是一个CLI工具,旨在部署到只有您可以访问的本地dev计算机上,而不是可以在其中访问的面向公众的远程服务器上。被黑客利用。
DaveAlden


52

于ionic@3.7.0弃用离子状态

如果您碰巧正在使用离子和离子cli,则可以运行:

ionic state reset

只要您所有的插件信息都早已保存在package.json中,这实际上将对所有插件执行rm / add。请注意,这也将管理/添加您的平台,但这无关紧要。

当您从存储库中忽略插件文件夹并希望在另一台计算机上设置项目时,这也非常有用。

显然,这并不能直接回答问题,但是许多人正在同时使用这两种方法,并且最终会在这里出现。


如果您在config.xml文件中定义了插件,则实际上可以删除插件,并在平台上执行rm / add循环。ionic platform add将发现丢失的插件并将其添加。但只有鸡舍定义config.xml
A.Grandt

ionic state reset绝对会删除插件- ionic state restore可能需要重新安装它们。
emc

1
ionic state reset-在ionic-v1中已弃用,因此您不能再使用此命令。
FrodmanG '17

1
自CLI 3.0起,[ERROR]离子状态已删除。我们建议直接使用Cordova来管理Cordova插件和平台。
Anil8753 '11

31

从npmjs.org找到了另一个答案

https://www.npmjs.com/package/cordova-plugin-update

基本上是将工具安装到您的项目中:

npm install -g cordova-plugin-update

完成后,您必须运行命令

cordova-plugin-update

如果有可用的较新版本的插件,它将提示您进行更新


我尝试了一下,但是它从config.xml中删除了插件,只是在package.json中进行了更新
Peter T.

27

这是我使用的bash脚本,可在OSX 10.11.3上使用。

#!/bin/bash

PLUGINS=$(cordova plugin list | awk '{print $1}')

for PLUGIN in $PLUGINS; do
    cordova plugin rm $PLUGIN --save && cordova plugin add $PLUGIN --save
done

根据珊的评论,如果有冲突,这可能会有所帮助。区别在于--force删除时添加了标志。

#!/bin/bash

PLUGINS=$(cordova plugin list | awk '{print $1}')

for PLUGIN in $PLUGINS; do
    cordova plugin rm $PLUGIN --force --save && cordova plugin add $PLUGIN --save
done

1
这是一个不错的技巧,但对于安装时需要参数的插件,例如cordova-plugin-facebook4
Max

2
添加--force可能有助于解决冲突cordova插件rm $ PLUGIN --force --save
Dan Jay

8

这是我的Windows Batch版本,可在一个命令中更新所有插件

如何使用:

从命令行,在项目的同一文件夹中,运行

c:\> batchNameFile

要么

c:\> batchNameFile autoupdate

其中“ batchNameFile”是.BAT文件的名称,带有以下脚本。

仅用于测试(第一个示例)或强制进行每个更新(第二个示例)

@echo off

cls

set pluginListFile=update.plugin.list

if exist %pluginListFile% del %pluginListFile%

Echo "Reading installed Plugins"
Call cordova plugins > %pluginListFile%
echo.

for /F "tokens=1,2 delims= " %%a in ( %pluginListFile% ) do (
   Echo "Checking online version for %%a"

   for /F "delims=" %%I in ( 'npm info %%a version' ) do (
     Echo "Local : %%b"
     Echo "Online: %%I"
     if %%b LSS %%I Call :toUpdate %%a %~1
     :cont
     echo.
   )
)

if exist %pluginListFile% del %pluginListFile%

Exit /B

:toUpdate
Echo "Need Update !"
if '%~2' == 'autoupdate' Call :DoUpdate %~1
goto cont

:DoUpdate
Echo "Removing Plugin"
Call cordova plugin rm %~1
Echo "Adding Plugin"
Call cordova plugin add %~1
goto cont

该批次仅在Windows 10中经过测试


6

转到您的cordova项目目录,然后编写

npm outdated

npm将显示您的代码outdated plugins(如果有的plugin outdated话),然后编写此命令

npm update

控制台预览


4

npm update -f 它的工作形式是我

npm更新-f

它将更新所有插件和cli

  • cordova-sqlite-storage@2.3.0
  • cordova-plugin-x-socialsharing@5.3.2
  • onesignal-cordova-plugin@2.3.3
  • @ ionic-native / device @ 4.6.0
  • @ ionic-native / screen-orientation @ 4.6.0
  • @ ionic-native / onesignal @ 4.6.0
  • @ ionic-native / status-bar @ 4.6.0
  • @ ionic-native / splash-screen @ 4.6.0
  • @ ionic-native / core @ 4.6.0
  • @ ionic-native / social-sharing @ 4.6.0
  • @ angular / cli @ 1.7.3
  • cordova-plugin-splashscreen@5.0.3-dev添加了322个软件包,删除了256个软件包,更新了91个软件包以及在350.86s中移动了8个软件包

3

我也喜欢这样的事情-使用PhoneGap / Cordova CLI进行插件管理非常烦人。此处的这篇博客文章可能是类似内容的开始-但我不确定A)如何利用它或B)效果如何。

http://nocurve.com/cordova-update-all-plugins-in-project

我最初尝试在终端命令行中直接运行整个脚本的确创建了带有添加/删除插件命令的文本输出……但是它们实际上并没有执行,只是回显到终端中。我已经联系作者,希望他们能再解释一些。


这里的博客作者-我不知道为什么我只回显命令-应该被运行-必须粘贴脚本的测试版本。无论如何,希望它能对某人
有所

2

您无法更新,但我编写了一个批处理文件,删除了我的插件并再次安装,因此在这种情况下,我的所有插件都将自动更新,希望这可以解决您的问题

@echo off
for %%a in (
"com.ionic.keyboard"
"com.phonegap.plugins.PushPlugin"
"cordova-instagram-plugin"
"cordova-plugin-camera"
"cordova-plugin-crosswalk-webview"
"cordova-plugin-file"
"cordova-plugin-file-transfer"

) do call cordova plugin rm %%a


for %%b in (
"com.ionic.keyboard"
"com.phonegap.plugins.PushPlugin"
"cordova-instagram-plugin"
"cordova-plugin-camera"
"cordova-plugin-crosswalk-webview"
"cordova-plugin-file"
"cordova-plugin-file-transfer"


) do call cordova plugin add %%b

有什么方法可以更新此脚本以从输出中刮取插件名称cordova plugins
mix3d

1

最简单的方法是删除plugins文件夹。运行此命令:cordova prepare 但是,在运行该命令 之前,可以在Cordova的插件存储库网站上检查您认为适用于您的构建的每个插件的版本,然后应手动修改config.xml文件。在通用建模语言文件“ config”的版本字段中使用上层胡萝卜“ ^”表示您希望指定的插件将来更新为最新版本(下次运行该命令)。


Heehee,上层胡萝卜,喜欢它。那使我脸上露出微笑。实际上,它是单数形式,称为插入符号(^)。
AlphaBeta

0

如果安装第三方软件包:

npm i cordova-check-plugins

然后,您可以运行一个简单的命令

cordova-check-plugins --update=auto --force

请记住,强迫任何事情总会带来改变的潜在风险。

如其他答案所述,管理这些插件的连接NPM软件包在更新插件时也需要随之更新,因此现在您可以使用以下命令进行检查:

npm outdated

然后大范围更新它们

npm update

现在,再次尝试为您的应用程序提供服务,并检查所有因更改而可能出错的内容。软件开发的喜悦!:)



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.