What is the right way to manage Cordova's plugins & platforms ?
On a project using [email protected]
& [email protected]
, 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.xml
like 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.xml
which clutters the project's root directory - Duplicate infos in
plugins/fetch.json
andplatforms/platforms.json
? - Must explicitly add
--save
option
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.json
with the following custom keys:cordovaPlugins
cordovaPlatforms
- 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
dependencies
since they are NPM packages anyway ?ionic
could symlink the dependancies betweennode_modules
&{plugins,platforms}/
Are the ionic & cordova developers considering a unification/refactorisation of this matter ?
ionic plugin add cordova-plugin-name --save
and it works for me (should update both the dependencies) – Zorgatone