Hey folks,

I feel like we're in a bit of a dependency hell, and I feel that it's because 
there are two distinct worlds of Cordova that use the same version space: the 
run-time world, and the CLI-time world. For example a runtime change in Windows 
that bumps cordova-windows from 4.x to 5.x also bumps the tools from 5.x to 
6.x, even though nothing changed as far as the tools are concerned.

Our current dependency chain works (and correct me if I'm wrong) this way 
(where "->" means "depend on"):

Plugins -> Platforms and Tools
Tools -> Platforms and cordova-common
Platforms -> cordova-common

I'm at a loss about how we restructure dependencies such that version updates 
don't cascade up the dependency chain. Moreover, cordova-common seems like a 
trap: platforms can *still* have different cordova-common versions and then we 
have all sorts of fun bugs. It seems like the easiest thing to do is to make 
the CLI work with *everything* and stand alone, and then to only leave these 
dependencies:

Plugins -> Platforms
Platforms -> cordova-common

That way the CLI only needs to change when we see it doesn't work, not when 
versions of things change. That is, the CLI changes as it pleases, never 
explicitly "pinning" anything, and the "plugin/platform add" commands can do 
their magic to make sure  they fetch compatible versions.

Another note here is this: since we're already specifying versions for 
platforms and plugins, can't we just put them into the package.json of an app 
and then just get "plugin/platform add" install from local node_modules by 
default?

This is just my take on the problem. What do you folks think?

Kindly,
Dmitry

Reply via email to