Skip to main content
 首页 » 编程设计

cordova之用于cordova插件的package.json vs config.xml

2024年09月07日25insus

管理 Cordova 插件和平台的正确方法是什么?

在使用 cordova@5.4.0 的项目中& ionic-cli@1.7.8 ,我面临两种可能性:

使用 Cordova (config.xml)

cordova create dummy-project && cd dummy-project 
cordova platform add browser --save 
cordova plugin add cordova-plugin-device --save 
 
## If forgot to add `--save` option, manually update config.xml 
#cordova platform save 
#cordova plugin save 
 
# reset platforms & plugins, like we just checked out the repository 
rm -rf platforms plugins 
 
# `cordova prepare` automatically setup platforms & plugins 
# dependencies via config.xml 
cordova prepare 

优点
  • 平台和插件属于 Cordova 领域,因此使用 cordova
  • 似乎很直观
  • 平台和插件版本保存在 config.xml如下所示:
    <plugin name="cordova-plugin-device" spec="~1.0.1" /> 
    <engine name="browser" spec="~4.0.0" /> 
    
  • checkout repo 的多个开发人员将获得相同的依赖项

  • 缺点
  • 另一个配置文件 config.xml弄乱了项目的根目录
  • plugins/fetch.json 中的重复信息和 platforms/platforms.json ?
  • 必须明确添加 --save选项

  • 使用 ionic (package.json)

    ionic start dummy-project blank && cd dummy-project 
    ionic platform add browser 
    ionic plugin add cordova-plugin-device 
     
    # reset platforms & plugins, like we just checked out the repository 
    rm -rf platforms plugins 
     
    # fetch platforms & plugins dependencies via package.json 
    ionic state restore 
    

    优点
  • 项目的依赖合并到 package.json使用以下自定义键:
  • cordovaPlugins
  • cordovaPlatforms
  • 添加平台或插件时的自动保存行为

  • 缺点
  • package.json 中没有针对插件或平台的版本固定(这对我来说是一个巨大的障碍)
  • 为什么不将 cordova 插件和平台放入 dependencies因为它们无论如何都是 NPM 包?ionic可以符号链接(symbolic link) node_modules 之间的依赖关系& {plugins,platforms}/

  • ionic & cordova 开发人员是否正在考虑对此事进行统一/重构?

    请您参考如下方法:

    编辑:第二次更新! 2017.05.

    它再次发生变化 - 这次是在 Cordova 方面。
    Cordova 7 添加了对 package.json 的支持!

    参见 Cordova 博客:http://cordova.apache.org/news/2017/05/04/cordova-7.html

    编辑:更新 2016.05。

    由于缺少 ionic 中的功能,似乎创建了许多 cordova 命令,但由于cordova catch 了并实现了许多新功能, ionic 维护人员正在考虑转储他们的命令,如 ionic state 以支持cordova提供的命令。

    因此,似乎走“cordova 方式”可能更具前瞻性。

    看那些票:

  • https://github.com/driftyco/ionic-cli/issues/904
  • https://github.com/driftyco/ionic-cli/issues/1324

  • 原始答案(2016.03.):

    我会说这是个人品味的问题。无论您采用哪种解决方案,最好保持一致,然后始终使用 cordova plugin add ...ionic plugin add,不要将两者混合使用。

    仅供引用,您可以使用 ionic 的解决方案进行版本固定,但确实,您必须手动放置,或者您必须在安装期间明确指定版本,例如 ionic plugin add ionic-plugin-keyboard@1.0.8 。在这方面, ionic CLI 肯定有改进的空间。

    例如,这是我们的 package.json,其中包含固定的插件版本和平台版本,以及固定的 github SHA1:
      "cordovaPlugins": [ 
        "ionic-plugin-keyboard@1.0.8", 
        "cordova-plugin-inappbrowser@1.2.0", 
        "phonegap-plugin-push@1.5.3", 
        { 
          "locator": "https://github.com/Initsogar/cordova-webintent.git#3d12378de9f38be900761a0ad06ab697cf6d9add", 
          "id": "com.borismus.webintent" 
        }, 
        { 
          "variables": { 
            "APP_ID": "123456789987654321", 
            "APP_NAME": "TEST" 
          }, 
          "locator": "cordova-plugin-facebook4@1.6.3", 
          "id": "cordova-plugin-facebook4@1.6.3" 
        } 
      ], 
      "cordovaPlatforms": [ 
        "android@4.1" 
      ] 
    

    然后,当您执行 ionic state restore 时,它​​将尊重列出的版本。