问题
What is the right way to manage Cordova's plugins & platforms ?
On a project using cordova@5.4.0 & ionic-cli@1.7.8, I face 2 possibilities:
with 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
Pros
- Platforms and plugins belong to the Cordova realm, so it seems intuitive to use cordova
Platforms and plugins versions are saved in
config.xmllike below:<plugin name="cordova-plugin-device" spec="~1.0.1" /> <engine name="browser" spec="~4.0.0" />Multiple developers who checkouts the repo will get the same dependencies
Cons
- Yet another config file
config.xmlwhich clutters the project's root directory - Duplicate infos in
plugins/fetch.jsonandplatforms/platforms.json? - Must explicitly add
--saveoption
with 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
Pros
- Project's dependencies consolidated into
package.jsonwith the following custom keys:cordovaPluginscordovaPlatforms
- Autosave behaviour when adding a platform or plugin
Cons
- No version pinning for plugins nor platforms in package.json (that's a huge blocker for me)
- Why not put cordova plugins & platforms into
dependenciessince they are NPM packages anyway ?ioniccould symlink the dependancies betweennode_modules&{plugins,platforms}/
Are the ionic & cordova developers considering a unification/refactorisation of this matter ?
回答1:
Edit: second update! 2017.05.
It changes again - this time on Cordova side.
Cordova 7 adds support for package.json!
See on Cordova blog: http://cordova.apache.org/news/2017/05/04/cordova-7.html
Edit: update 2016.05.
It seems that many ionic commands were created due to lack of the features in cordova, but since cordova caught up and implemented many new features, the ionic maintainers are considering dumping their command like ionic state in favor of the ones provided by cordova.
So it seems that going the "cordova way" might be more future-proof.
See those tickets:
- https://github.com/driftyco/ionic-cli/issues/904
- https://github.com/driftyco/ionic-cli/issues/1324
Original answer (2016.03.):
It's a matter of person taste I'd say. Whatever solution you go through, it's best to be consistent and then always use cordova plugin add ... or ionic plugin add and not mix the two.
FYI you can have version pinning with ionic's solution, but true, you have to put it manually, or you have to specify the version explicitly during installation e.g. ionic plugin add ionic-plugin-keyboard@1.0.8. Definitely there's room for improvements in ionic CLI regarding that.
For example, this is our package.json with pinned plugin versions and platform versions as well, and also pinned 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"
]
Then when you do ionic state restore it will honor the versions listed.
回答2:
i would try using ionic state save and ionic state restore to manage the configuration including plugins... See documentation for more information
来源:https://stackoverflow.com/questions/33830058/package-json-vs-config-xml-for-cordova-plugins