【问题标题】:Update cordova plugins in one command在一个命令中更新cordova插件
【发布时间】:2015-05-01 06:44:05
【问题描述】:

我想知道有没有更简单的方法来更新 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 */

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

【问题讨论】:

标签: cordova cordova-plugins


【解决方案1】:

你不能更新它。您可以做的是卸载cordova插件并重新添加。

cordova plugin rm https://github.com/apache/cordova-plugin-camera --save
cordova plugin add https://github.com/apache/cordova-plugin-camera --save

【讨论】:

【解决方案2】:

我也会喜欢这样的东西 - 使用 PhoneGap/Cordova CLI 进行插件管理非常烦人。此处的这篇博客文章可能是这样的开始 - 但我不太确定 A)如何利用它或 B)它的工作情况如何。

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

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

【讨论】:

  • 博客作者在这里 - 我不知道为什么我只是回应命令 - 它们应该运行 - 必须粘贴脚本的测试版本。无论如何,希望它可以帮助某人......
【解决方案3】:

你无法更新,但我写了一个批处理文件删除我的插件并重新安装,所以在这种情况下,我的所有插件都会自动更新,希望这能解决你的问题

@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 的输出中抓取插件名称?
【解决方案4】:

不推荐使用离子状态,如 ionic@3.7.0

如果你碰巧使用 ionic 和 ionic cli,你可以运行:

ionic state reset

只要你之前所有的插件信息都保存在你的 package.json 中,这实际上会为你的所有插件执行 rm/add。请注意,这也会 rm/add 您的平台,但这不重要。

当您从仓库中忽略插件文件夹并希望在另一台机器上设置项目时,这也很好。

显然这并不能直接回答问题,但很多人目前都在使用这两种方法,并且会在这里结束。

【讨论】:

  • 如果您在config.xml 文件中定义了插件,您实际上可以删除插件,然后在平台上执行 rm/add 循环。 ionic platform add 将发现缺少的插件并添加它们。但仅限于config.xml 中定义的那些
  • ionic state reset 肯定会删除插件 - 可能需要ionic state restore 重新安装它们。
  • 离子状态重置 - 在 ionic-v1 中已弃用,因此您不能再使用此命令。
  • [ERROR] 自 CLI 3.0 起,离子状态已被删除。我们建议直接使用 Cordova 来管理 Cordova 插件和平台。
【解决方案5】:

不需要删除,重新添加即可。

cordova plugin add https://github.com/apache/cordova-plugin-camera

【讨论】:

    【解决方案6】:

    我厌倦了手动检查插件更新,所以创建了一个工具来帮我做这件事:https://github.com/dpa99c/cordova-check-plugins

    全局安装:

    $ npm install -g cordova-check-plugins
    

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

    $ cordova-check-plugins --update=auto
    

    【讨论】:

    • 我在运行第二行时出错:错误如下:插件:cordova-plugin-statusbar 源:npm://cordova-plugin-statusbar 安装版本:未知 - 检查 plugins/fetch.json孤立的条目。远程版本:2.1.1 我该如何解决?谢谢
    • @Agnosco 这意味着插件无法确定本地版本号,可能是因为损坏的fetch.json。我建议手动删除并重新安装受影响的插件。
    • 太棒了!一个可能的改进是在更新时增加为命令提供参数的可能性,例如对于 facebook 插件,它可以自动更新并且没有这个问题Error: Variable(s) missing (use: --variable APP_ID=value --variable APP_NAME=value)
    • @JeremyBelolo cordova-check-plugins@1.1.4 添加了对更新时保留变量的支持:-)
    • @Al-Mothafar 你误解了 npm 报告安全漏洞的目的。正如我在issue you opened 中所说,npm 报告的包漏洞在这里无关紧要,因为这是一个 CLI 工具,旨在部署到只有您可以访问的本地开发机器,而不是远程面向公众的服务器,他们可以被黑客利用。
    【解决方案7】:

    这是我使用的 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
    

    如果存在冲突,这可能会有所帮助,根据 shan's comment。不同之处在于删除时添加了--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
    

    【讨论】:

    • 这是一个不错的 hack,但对于安装时需要参数的插件会失败,例如 cordova-plugin-facebook4
    • 添加 --force 可能有助于解决冲突 cordova plugin rm $PLUGIN --force --save
    【解决方案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 中测试

    【讨论】:

      【解决方案9】:
      cordova-check-plugins --update=auto --force
      

      使用命令行

      【讨论】:

      • 这不是默认安装的工具。
      【解决方案10】:

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

      【讨论】:

      • 嘻嘻,上萝卜,喜欢。这让我的脸上露出了笑容。实际上它是单数的,称为脱字符号 (^)。
      【解决方案11】:

      从 npmjs.org 找到另一个答案

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

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

      npm install -g cordova-plugin-update
      

      完成后,您必须运行命令

      cordova-plugin-update
      

      如果有更新版本的插件可用,它会提示您更新

      【讨论】:

      • 我试过了,但它从 config.xml 中删除了插件,只是在 package.json 中更新了
      【解决方案12】:

      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 在 350.86 秒内增加了 322 个包,删除了 256 个包,更新了 91 个包,移动了 8 个包

      【讨论】:

        【解决方案13】:

        进入你的cordova项目目录然后写

        npm outdated
        

        npm 会显示你的outdated plugins,如果有plugin outdated 然后写这个命令

        npm update
        

        【讨论】:

          【解决方案14】:

          如果你安装了第三方包:

          npm i cordova-check-plugins
          

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

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

          请记住,强制任何事情总是会带来破坏更改的潜在风险。

          正如其他答案所述,管理这些插件的连接 NPM 包也需要在更新插件时进行后续更新,因此现在您可以通过以下方式检查它们:

          npm outdated
          

          然后彻底更新它们

          npm update
          

          现在试探性地再次为您的应用提供服务,并检查所有可能因重大更改而出错的事情。软件开发的乐趣! :)

          【讨论】:

            【解决方案15】:

            您必须在命令提示符中添加此 Cordova 命令:

            npm install -g cordova-plugin-update
            
            cordova-plugin-update
            

            输入此命令后,插件将被添加。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-03-21
              • 1970-01-01
              • 2014-07-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多