web-dev-qa-db-fra.com

package.json vs config.xml pour les plugins cordova

Quelle est la bonne façon de gérer les plateformes de plugins de Cordova?

Sur un projet utilisant [email protected][email protected], Je fais face à 2 possibilités:

avec 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

Avantages

  • Les plates-formes et plugins appartiennent au domaine Cordova , il semble donc intuitif d'utiliser cordova
  • Les versions des plateformes et plugins sont enregistrées dans config.xml comme ci-dessous:

    <plugin name="cordova-plugin-device" spec="~1.0.1" />
    <engine name="browser" spec="~4.0.0" />
    
  • Plusieurs développeurs qui récupèrent le référentiel obtiendront les mêmes dépendances

Contre

  • Encore un autre fichier de configuration config.xml qui encombre le répertoire racine du projet
  • Infos en double dans plugins/fetch.json et platforms/platforms.json?
  • Doit explicitement ajouter --save option

avec 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

Avantages

  • Les dépendances du projet consolidées en package.json avec les touches personnalisées suivantes:
    • cordovaPlugins
    • cordovaPlatforms
  • Comportement de la sauvegarde automatique lors de l'ajout d'une plateforme ou d'un plugin

Les inconvénients

  • Pas de version épinglée pour les plugins ni les plates-formes dans package.json (c'est un énorme bloqueur pour moi)
  • Pourquoi ne pas mettre les plates-formes de plugins cordova dans dependencies car ce sont des packages NPM de toute façon? ionic pourrait créer un lien symbolique entre les dépendances entre node_modules{plugins,platforms}/

Les développeurs ionic cordova envisagent-ils une unification/refactorisation de cette matière?)

32
Julien Huang

Edit: deuxième mise à jour! 2017.05.

Cela change encore - cette fois du côté de Cordoue. Cordova 7 ajoute la prise en charge de package.json!

Voir sur le blog Cordova: http://cordova.Apache.org/news/2017/05/04/cordova-7.html

Edit: mise à jour 2016.05.

Il semble que de nombreuses commandes ionic ont été créées en raison du manque de fonctionnalités dans cordova, mais depuis que cordova a rattrapé et implémenté de nombreuses nouvelles fonctionnalités, les responsables ionic envisagent de vider leur commande comme ionic state en faveur de celles fournies par cordova.

Il semble donc que suivre la "voie cordova" pourrait être plus pérenne.

Voir ces billets:

Réponse originale (2016.03.):

C'est une question de goût, je dirais. Quelle que soit la solution que vous utilisez, il est préférable d'être cohérent et d'utiliser toujours cordova plugin add ... ou ionic plugin add et ne pas mélanger les deux.

Pour info, vous pouvez avoir la version épinglée avec la solution d'ionic, mais c'est vrai, vous devez la mettre manuellement, ou vous devez spécifier la version explicitement lors de l'installation, par ex. ionic plugin add [email protected]. Il y a certainement de la place pour des améliorations dans ionic CLI à ce sujet.

Par exemple, c'est notre package.json avec les versions des plugins et des plates-formes épinglées, ainsi que le github SHA1 épinglé:

  "cordovaPlugins": [
    "[email protected]",
    "[email protected]",
    "[email protected]",
    {
      "locator": "https://github.com/Initsogar/cordova-webintent.git#3d12378de9f38be900761a0ad06ab697cf6d9add",
      "id": "com.borismus.webintent"
    },
    {
      "variables": {
        "APP_ID": "123456789987654321",
        "APP_NAME": "TEST"
      },
      "locator": "[email protected]",
      "id": "[email protected]"
    }
  ],
  "cordovaPlatforms": [
    "[email protected]"
  ]

Ensuite, lorsque vous faites ionic state restore il honorera les versions listées.

26
jakub.g

j'essaierais d'utiliser ionic state save et ionic state restore pour gérer la configuration y compris les plugins ... Voir la documentation pour plus d'informations

2
Aaron Saunders