No, at least not how I'd see it done.

1.) Updating is important. Staying current: encouraged.
2.) I'd make my App depend on a specific CLI version. I'd call into that
using npm scripts.




On Tue, Jun 3, 2014 at 10:48 AM, Michal Mocny <[email protected]> wrote:

> Thinking it through, if cordova platforms are deps of the CLI, to install a
> specific version you wouldn't just do:
> > npm install -g [email protected]
>
> you would actually need to:
> > cd $(npm config get prefix)/lib/node_modules/cordova
> > npm install --save [email protected]
>
> ..and then remember to do that again whenever you `npm update -g`
> ..and its harder to have multiple platform versions for different projects
> (questionable if this is useful for devs outside of cordova contributors,
> but may be useful at last test upgrades when we ship new platform
> versions).
>
> -Michal
>
>
> On Tue, Jun 3, 2014 at 1:28 PM, Brian LeRoux <[email protected]> wrote:
>
> > NIH: not invented here
> >
> >
> >
> > On Tue, Jun 3, 2014 at 10:17 AM, Andrew Grieve <[email protected]>
> > wrote:
> >
> > > On Tue, Jun 3, 2014 at 12:19 PM, Brian LeRoux <[email protected]> wrote:
> > >
> > > > Actually that was >0 LOC which is a fine argument if you ask me. And
> we
> > > > both know there is much more to it than just that. lazy_load…for
> > example.
> > >
> > >
> > > If you're concerned about code, there is a tonne of much lower-hanging
> > > fruit.
> > >
> > >
> > > >
> > > > Bundling platforms is bundling a dep that we require to operate. We
> do
> > > not
> > > > require plugins to operate. You cannot build a project without
> having a
> > > > platform and, indeed, you probably want more than one.
> > > >
> > > I don't require blackberry to create an iOS project. But I do require
> > some
> > > plugins. We use "npm cache add" to download plugins, I don't see how
> > > platforms would not work just as easily.
> > >
> > >
> > > >
> > > > Agree that we need discreet versioning: hence why I'm advocating we
> use
> > > > well understood, maintained, and effectively standard system for
> doing
> > > > this. We do not need NIH dependencies that is what package.json is
> for!
> > > >
> > >
> > > I don't know what NIH dependencies are. Googling suggests you're
> talking
> > > about drugs...
> > >
> > > We *are* using npm for downloading, we're just not making the user type
> > it
> > > directly.
> > >
> > > Mark's approach also avoids the "what-if" cases where what's in your
> > > node_modules might not match what's in your platforms/
> > >
> > > Does what Mark has implemented not address a use-case of yours? Or are
> we
> > > going back & forth over personal preference?
> > >
> > >
> > >
> > >
> > >
> > >
> > > >
> > > >
> > > >
> > > >
> > > > On Tue, Jun 3, 2014 at 9:07 AM, Andrew Grieve <[email protected]>
> > > > wrote:
> > > >
> > > > > On Tue, Jun 3, 2014 at 11:34 AM, Brian LeRoux <[email protected]> wrote:
> > > > >
> > > > > > Andrew, you misunderstand. I am talking about bundling platforms
> > > > directly
> > > > > > as dependencies of the CLI.
> > > > > >
> > > > > > A trivial example:
> > > > > >
> > > > > > CLI
> > > > > > '-ios
> > > > > >
> > > > > > Wherein, CLI declares the precise version of the platform it
> uses.
> > We
> > > > > could
> > > > > > wildcard. I don't know that we want or need to do that.
> > > > > >
> > > > > > It would have identical semantics to today except the download
> > > penalty
> > > > > > happens up front. (We can remove lazy_load logic. We don't have
> to
> > > > > maintain
> > > > > > our own dependency manifests and caches. LESS code: good thing.)
> > > > > >
> > > > >
> > > > > Let me paste the code for doing our own caching for you:
> > > > >
> > > > >     cordova_npm: function lazy_load_npm(platform) {
> > > > >         if (!(platform in platforms)) {
> > > > >             return Q.reject(new Error('Cordova library "' +
> platform
> > +
> > > '"
> > > > > not recognized.'));
> > > > >         }
> > > > >         var pkg = 'cordova-' + platform + '@' +
> > > > > platforms[platform].version;
> > > > >         return Q.nfcall( npm.load, {cache:
> > path.join(util.libDirectory,
> > > > > 'npm_cache') })
> > > > >         .then(function() {
> > > > >             return Q.ninvoke(npm.commands, 'cache', ['add', pkg]);
> > > > >         }).then(function(info) {
> > > > >             var pkgDir = path.resolve(npm.cache, info.name,
> > > > info.version,
> > > > > 'package');
> > > > >             return pkgDir;
> > > > >         });
> > > > >     },
> > > > >
> > > > > There's really no "amount of code" argument here.
> > > > >
> > > > >
> > > > >
> > > > > > Adding platforms at a specific version would mean having a
> specific
> > > > > version
> > > > > > of the CLI. Yes: this is way better! Explicit dependencies is the
> > > best
> > > > > way
> > > > > > to work w/ the small modules thing.
> > > > > >
> > > > >
> > > > > Bundling platforms with CLI would be like bundling all of the
> plugins
> > > > with
> > > > > CLI, or like bundling every npm module with npm.
> > > > >
> > > > > Devs need to be able to try out platforms at different versions. We
> > > > should
> > > > > not do anything that keeps users clinging to old versions of CLI
> > (e.g.
> > > > they
> > > > > do this now because they don't want to update to new platforms)
> > > > >
> > > > >
> > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > On Mon, Jun 2, 2014 at 7:34 PM, Michal Mocny <
> [email protected]>
> > > > > wrote:
> > > > > >
> > > > > > > On Mon, Jun 2, 2014 at 10:14 PM, Andrew Grieve <
> > > [email protected]
> > > > >
> > > > > > > wrote:
> > > > > > >
> > > > > > > > Here's both flows as I understand them:
> > > > > > > >
> > > > > > > > Direct NPM flow:
> > > > > > > > # Downloads platform source into node_modules
> > > > > > > > npm install [email protected] --save
> > > > > > > > # Runs the create script and installs plugins to create
> > > > platforms/ios
> > > > > > > > cordova platform add ios --path=node_modules/cordova-ios
> > > > > > > >
> > > > > > >
> > > > > > > To be fair, I think with Brian's suggestion, platform add FOO
> > would
> > > > by
> > > > > > > default look in node_modules so you wouldn't be explicit about
> > it,
> > > > and
> > > > > > also
> > > > > > > the default cordova project package.json would depend on all
> the
> > > > latest
> > > > > > > versions of each platform, so the flows would actually be:
> > > > > > > > cordova create Foo && cd Foo
> > > > > > > > npm install
> > > > > > > > npm install [email protected] --save
> > > > > > > > cordova platform add android
> > > > > > > > cordova platform add ios
> > > > > > > > # crazy idea? use npm post-install hooks to auto-run
> > > create/upgrade
> > > > > so
> > > > > > > you usually don't need above two lines?
> > > > > > >
> > > > > > > Compared to:
> > > > > > > > cordova create Foo && cd Foo
> > > > > > > > cordova platform add android
> > > > > > > > cordova platform add [email protected]
> > > > > > >
> > > > > > > I think #2 is enough better that its not worth changing.
> > > > > > >
> > > > > > >
> > > > > > > > Cordova-to-npm flow (as Mark's implemented):
> > > > > > > > # Runs "npm cache add cordova-ios", then runs create script
> > from
> > > > > > > > ~/cache/cordova-ios/bin/create
> > > > > > > > cordova platform add [email protected]
> > > > > > > >
> > > > > > > > - In both flows: we use npm to do all of the heavy lifting
> > > > > > > > - In both flows: the npm module is cached in your home
> > directory
> > > > > > > > - In both flows?: we store the plugins & platforms explicitly
> > > > within
> > > > > > > > config.xml (Gorkem's added this)
> > > > > > > > - In flow #1, we have a package.json & a node_modules, in #2
> we
> > > > > don't.
> > > > > > > >
> > > > > > > > Why put the onus on the user to fetch the platform source
> when
> > > it's
> > > > > as
> > > > > > > easy
> > > > > > > > as running "npm cache add" under-the-hood?
> > > > > > > >
> > > > > > > >
> > > > > > > > In regards to the idea of using require() on platform scripts
> > > > instead
> > > > > > of
> > > > > > > > subshelling: I think this is tangental to the debate of how
> to
> > > > fetch
> > > > > > the
> > > > > > > > platform.
> > > > > > > > In regards to using "npm install" directly when using the
> > plugman
> > > > > > > workflow:
> > > > > > > > Sounds good to me.
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > On Mon, Jun 2, 2014 at 6:05 PM, Brian LeRoux <[email protected]>
> > wrote:
> > > > > > > >
> > > > > > > > > Eventually, yes. (Sort of how Grunt works now.)
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > On Mon, Jun 2, 2014 at 5:52 PM, Terence M. Bandoian <
> > > > > > [email protected]
> > > > > > > >
> > > > > > > > > wrote:
> > > > > > > > >
> > > > > > > > > > Can multiple versions of a platform be installed
> > > side-by-side?
> > > > > > > > > >
> > > > > > > > > > -Terence
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > On 6/2/2014 3:04 PM, Michal Mocny wrote:
> > > > > > > > > >
> > > > > > > > > >> >From original email: "Ideal future CLI uses platforms
> > just
> > > > like
> > > > > > > other
> > > > > > > > > >> deps.
> > > > > > > > > >> We lose lazy loading but network and disk is cheap so it
> > > > wasn't
> > > > > > > really
> > > > > > > > > >> important anyhow."
> > > > > > > > > >> Made me think Brian is proposing adding platforms to cli
> > > > > > > package.json
> > > > > > > > > >> dependencies, and you would have a single global install
> > > > > > > > > >> cordova-platforms.
> > > > > > > > > >>   Then you can override the version with an explicit
> > install
> > > > as
> > > > > he
> > > > > > > > > >> mentions
> > > > > > > > > >> "npm i [email protected]".
> > > > > > > > > >>
> > > > > > > > > >> Personally, I think that workflow could work, and has a
> > few
> > > > > > > benefits,
> > > > > > > > > but
> > > > > > > > > >> I'm not sure that option compares well to the
> alternative
> > of
> > > > > just
> > > > > > > lazy
> > > > > > > > > >> loading using npm cache add as Mark has already
> > implemented
> > > an
> > > > > > > > > experiment
> > > > > > > > > >> (anyone interested in this topic should take a look at
> > that
> > > > > > patch).
> > > > > > > > > >>
> > > > > > > > > >> The steps Brian & Ian outline about how to package
> > platforms
> > > > for
> > > > > > > > release
> > > > > > > > > >> to
> > > > > > > > > >> npm are possibly an improvement over the old-style
> > > > > > platform-centric
> > > > > > > > > >> workflow.  Instead of downloading a tarball and running
> a
> > > > create
> > > > > > > > script,
> > > > > > > > > >> you npm install and run a create() function, and that
> can
> > > more
> > > > > > > easily
> > > > > > > > be
> > > > > > > > > >> bundled into other build scripts/boilerplate.  For CLI
> > > > workflow,
> > > > > > not
> > > > > > > > > sure
> > > > > > > > > >> that there is any real difference (as Jesse says).  One
> > > note,
> > > > > > > though:
> > > > > > > > > >>   cordova-* platforms are templates for projects, so the
> > > > > > > package.json
> > > > > > > > of
> > > > > > > > > >> the
> > > > > > > > > >> npm package itself shouldn't end up inside projects that
> > are
> > > > > > created
> > > > > > > > > with
> > > > > > > > > >> it. I think.
> > > > > > > > > >>
> > > > > > > > > >> -Michal
> > > > > > > > > >>
> > > > > > > > > >>
> > > > > > > > > >> On Mon, Jun 2, 2014 at 3:42 PM, Ian Clelland <
> > > > > > > [email protected]>
> > > > > > > > > >> wrote:
> > > > > > > > > >>
> > > > > > > > > >>  There seems to be some confusion -- I think people are
> > > > talking
> > > > > > > about
> > > > > > > > > >>> different things here, but perhaps it's just me ;)
> > > > > > > > > >>>
> > > > > > > > > >>> I thought that Brian's original suggestion was about
> > being
> > > > able
> > > > > > to
> > > > > > > > host
> > > > > > > > > >>> Cordova platforms directly on NPM. That's why each one
> > > would
> > > > > > > require
> > > > > > > > a
> > > > > > > > > >>> package.json. (which would probably end up in
> > > > > > > > > >>> <project>/platforms/<platform> in a project, but that's
> > not
> > > > the
> > > > > > > point
> > > > > > > > > of
> > > > > > > > > >>> it).
> > > > > > > > > >>>
> > > > > > > > > >>> As an NPM project, we then would have the opportunity
> > > (though
> > > > > not
> > > > > > > the
> > > > > > > > > >>> obligation) to make all of the supporting scripts for
> > each
> > > > > > platform
> > > > > > > > > >>> (create, build, run, etc) part of the node module, for
> a
> > > > > uniform
> > > > > > > > > >>> interface
> > > > > > > > > >>> that doesn't require going through the command line.
> > > > > > > > > >>>
> > > > > > > > > >>> It's not about making platforms into CLI dependencies
> > (any
> > > > more
> > > > > > > than
> > > > > > > > > >>> plugins are CLI dependencies right now), or about
> making
> > a
> > > > > > > > > cordova-based
> > > > > > > > > >>> project into a node package.
> > > > > > > > > >>>
> > > > > > > > > >>> If that's right, then I support that -- I'd like the
> > > > platforms
> > > > > to
> > > > > > > be
> > > > > > > > > >>> installable through npm, and to be versioned
> separately,
> > > > > > > installable
> > > > > > > > > >>> separately, and scriptable without having to spawn
> > > subshells.
> > > > > > > > > >>>
> > > > > > > > > >>> And if I have it completely wrong, then let me know --
> > I'll
> > > > > just
> > > > > > go
> > > > > > > > > back
> > > > > > > > > >>> to
> > > > > > > > > >>> fixing File bugs ;)
> > > > > > > > > >>>
> > > > > > > > > >>>
> > > > > > > > > >>> On Mon, Jun 2, 2014 at 3:29 PM, Andrew Grieve <
> > > > > > > [email protected]>
> > > > > > > > > >>> wrote:
> > > > > > > > > >>>
> > > > > > > > > >>>  Not sure what your question is.
> > > > > > > > > >>>>
> > > > > > > > > >>>>
> > > > > > > > > >>>> On Mon, Jun 2, 2014 at 2:03 PM, Brian LeRoux <
> > [email protected]>
> > > > > > wrote:
> > > > > > > > > >>>>
> > > > > > > > > >>>>  *ahem
> > > > > > > > > >>>>>
> > > > > > > > > >>>>>
> > > > > > > > > >>>>> On Wed, May 28, 2014 at 11:20 AM, Brian LeRoux <
> > > [email protected]
> > > > >
> > > > > > > wrote:
> > > > > > > > > >>>>>
> > > > > > > > > >>>>>  npm i [email protected]
> > > > > > > > > >>>>>>
> > > > > > > > > >>>>>> Right?
> > > > > > > > > >>>>>> On May 27, 2014 11:06 PM, "Andrew Grieve" <
> > > > > > [email protected]
> > > > > > > >
> > > > > > > > > >>>>>>
> > > > > > > > > >>>>> wrote:
> > > > > > > > > >>>>
> > > > > > > > > >>>>> Lazy loading is what will give us the ability to
> > support
> > > > > > multiple
> > > > > > > > > >>>>>>>
> > > > > > > > > >>>>>> versions
> > > > > > > > > >>>>>
> > > > > > > > > >>>>>> of platforms.
> > > > > > > > > >>>>>>>
> > > > > > > > > >>>>>>> If we don't support users choosing the version of
> the
> > > > > > platform
> > > > > > > > they
> > > > > > > > > >>>>>>>
> > > > > > > > > >>>>>> want,
> > > > > > > > > >>>>>
> > > > > > > > > >>>>>> then they will resist updating their version of CLI
> > > (like
> > > > > they
> > > > > > > do
> > > > > > > > > >>>>>>>
> > > > > > > > > >>>>>> right
> > > > > > > > > >>>>
> > > > > > > > > >>>>> now).
> > > > > > > > > >>>>>>>
> > > > > > > > > >>>>>>> I'm very keen to allow users to chose their
> platform
> > > > > > versions,
> > > > > > > > just
> > > > > > > > > >>>>>>>
> > > > > > > > > >>>>>> as
> > > > > > > > > >>>
> > > > > > > > > >>>> they
> > > > > > > > > >>>>>>> are able to choose their plugin versions.
> > > > > > > > > >>>>>>>
> > > > > > > > > >>>>>>>
> > > > > > > > > >>>>>>>
> > > > > > > > > >>>>>>> On Tue, May 27, 2014 at 5:57 PM, Mark Koudritsky <
> > > > > > > > > [email protected]
> > > > > > > > > >>>>>>> wrote:
> > > > > > > > > >>>>>>>
> > > > > > > > > >>>>>>>  +1
> > > > > > > > > >>>>>>>>
> > > > > > > > > >>>>>>>> Steve published (some of?) the platforms on npm as
> > > part
> > > > of
> > > > > > the
> > > > > > > > > >>>>>>>>
> > > > > > > > > >>>>>>> latest
> > > > > > > > > >>>>
> > > > > > > > > >>>>> release.
> > > > > > > > > >>>>>>>> https://www.npmjs.org/package/cordova-android
> > > > > > > > > >>>>>>>> https://www.npmjs.org/package/cordova-ios
> > > > > > > > > >>>>>>>>
> > > > > > > > > >>>>>>>> CLI already require()s npm for downloading plugins
> > > from
> > > > > the
> > > > > > > > > >>>>>>>>
> > > > > > > > > >>>>>>> registry.
> > > > > > > > > >>>>
> > > > > > > > > >>>>> Extending this to platforms is on my todo list for
> > > > this\next
> > > > > > > week.
> > > > > > > > > >>>>>>>> The "lazy" part of the loading was about caching,
> so
> > > we
> > > > > > don't
> > > > > > > > lose
> > > > > > > > > >>>>>>>>
> > > > > > > > > >>>>>>> it
> > > > > > > > > >>>>
> > > > > > > > > >>>>> since
> > > > > > > > > >>>>>>>
> > > > > > > > > >>>>>>>> npm does its own caching.
> > > > > > > > > >>>>>>>>
> > > > > > > > > >>>>>>>>
> > > > > > > > > >>>>>>>>
> > > > > > > > > >>>>>>>> On Tue, May 27, 2014 at 5:42 PM, Parashuram
> > Narasimhan
> > > > (MS
> > > > > > > OPEN
> > > > > > > > > >>>>>>>>
> > > > > > > > > >>>>>>> TECH)
> > > > > > > > > >>>>
> > > > > > > > > >>>>> <
> > > > > > > > > >>>>>
> > > > > > > > > >>>>>> [email protected]> wrote:
> > > > > > > > > >>>>>>>>
> > > > > > > > > >>>>>>>>  +1. This will also be a step towards releasing
> > > > platforms
> > > > > > > > > >>>>>>>>>
> > > > > > > > > >>>>>>>> independently.
> > > > > > > > > >>>>>>>
> > > > > > > > > >>>>>>>> Will the CLI have a semver like dependency on the
> > > > platform
> > > > > > > > > >>>>>>>>>
> > > > > > > > > >>>>>>>> specified
> > > > > > > > > >>>>
> > > > > > > > > >>>>> somewhere ? Would the cli have to require('npm') and
> do
> > > the
> > > > > > > > > >>>>>>>>>
> > > > > > > > > >>>>>>>> install?
> > > > > > > > > >>>>
> > > > > > > > > >>>>> -----Original Message-----
> > > > > > > > > >>>>>>>>> From: [email protected] [mailto:
> > > > > > [email protected]]
> > > > > > > > On
> > > > > > > > > >>>>>>>>>
> > > > > > > > > >>>>>>>> Behalf
> > > > > > > > > >>>>>>>
> > > > > > > > > >>>>>>>> Of
> > > > > > > > > >>>>>>>>
> > > > > > > > > >>>>>>>>> Brian LeRoux
> > > > > > > > > >>>>>>>>> Sent: Tuesday, May 27, 2014 2:20 PM
> > > > > > > > > >>>>>>>>> To: [email protected]
> > > > > > > > > >>>>>>>>> Subject: adding platforms to npm for dependency
> > > sanity
> > > > > > > > > >>>>>>>>>
> > > > > > > > > >>>>>>>>> We've discussed this but I'm not sure the whole
> > idea
> > > > has
> > > > > > > > > >>>>>>>>>
> > > > > > > > > >>>>>>>> crystalized.
> > > > > > > > > >>>>>
> > > > > > > > > >>>>>> My
> > > > > > > > > >>>>>>>
> > > > > > > > > >>>>>>>> proposal (based on previous discussions) below.
> I'll
> > > use
> > > > > iOS
> > > > > > > as
> > > > > > > > > >>>>>>>>>
> > > > > > > > > >>>>>>>> an
> > > > > > > > > >>>
> > > > > > > > > >>>> example
> > > > > > > > > >>>>>>>>
> > > > > > > > > >>>>>>>>> but this applies to all platforms supported by
> the
> > > CLI.
> > > > > > > > > >>>>>>>>>
> > > > > > > > > >>>>>>>>> First, we'd add two files:
> > > > > > > > > >>>>>>>>>
> > > > > > > > > >>>>>>>>> cordova-ios
> > > > > > > > > >>>>>>>>> |-package.json
> > > > > > > > > >>>>>>>>> '-index.js
> > > > > > > > > >>>>>>>>>
> > > > > > > > > >>>>>>>>> …I don't think I need to describe the utility of
> > > > > > package.json
> > > > > > > > > >>>>>>>>>
> > > > > > > > > >>>>>>>> but
> > > > > > > > > >>>
> > > > > > > > > >>>> index.js
> > > > > > > > > >>>>>>>>
> > > > > > > > > >>>>>>>>> would expose programatic library apis:
> > > > > > > > > >>>>>>>>>
> > > > > > > > > >>>>>>>>> module.exports = { create:Function, run:Function,
> > > > > > > > > >>>>>>>>>
> > > > > > > > > >>>>>>>> build:Function,
> > > > > > > > > >>>
> > > > > > > > > >>>> clean:Function, log:Function}
> > > > > > > > > >>>>>>>>>
> > > > > > > > > >>>>>>>>> We then publish to npm. That is it for now. Ideal
> > > > future
> > > > > > CLI
> > > > > > > > > >>>>>>>>>
> > > > > > > > > >>>>>>>> uses
> > > > > > > > > >>>
> > > > > > > > > >>>> platforms just like other deps. We lose lazy loading
> but
> > > > > network
> > > > > > > > > >>>>>>>>>
> > > > > > > > > >>>>>>>> and
> > > > > > > > > >>>>
> > > > > > > > > >>>>> disk
> > > > > > > > > >>>>>>>
> > > > > > > > > >>>>>>>> is cheap so it wasn't really important anyhow.
> > > > > > > > > >>>>>>>>>
> > > > > > > > > >>>>>>>>> Discuss!
> > > > > > > > > >>>>>>>>>
> > > > > > > > > >>>>>>>>>
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

Reply via email to