Thanks for that structured write-up, Oliver. You saved me from writing all
of that myself.

+100 on all those points

Oliver Salzburg <oliver.salzb...@gmail.com> schrieb am Fr., 10. Mai 2019,
11:01:

> I don't see how third-party tools like nvm or nvm-windows play a role in
> this. If those tools have defects, so be it, but that shouldn't steer a
> decision when the tools in question ship with the official tools that we
> use (NodeJS).
> This holds especially true if the issues have already been fixed.
>
> That being said, it seems like part of this discussion is already going
> into a direction of local vs. global Cordova install, which I didn't
> even think was up for debate anymore. What was up for debate last night,
> was how to interact with local Cordova installs.
>
> However, let me reiterate all points regarding the entire issue:
>
> 1. A global Cordova installation is a huge issue in itself, as
> components in Cordova interact with each other in a way that sometimes
> the global components are used and sometimes the local components. This
> happens during runs of individual tasks, like "prepare", where both the
> local and the global cordova-common are loaded for example.
> This issue would easily be avoided by placing Cordova itself locally in
> the project. It allows a per-project Cordova version, which is
> controlled through the package.json, like any other Cordova component.
> Having your core component global is a horrible design and many other
> projects have already realized this years ago and adjusted accordingly.
> Think gulp-cli, babel-cli, ...
>
> The current approach leads to extremely hard to debug issues and,
> ultimately, developer frustration.
>
> 2. Interacting with a local dependency that has a binary entrypoint in
> node_modules/.bin is exactly what npx was made for. It is already
> established as a tool in the NodeJS world and many other projects make
> use of it in the manner we're suggesting.
> https://reactjs.org/docs/create-a-new-react-app.html
> https://babeljs.io/docs/en/babel-cli
> https://gulpjs.com/docs/en/getting-started/quick-start
>
> There needs to be a very good reason to avoid adapting a well
> established approach in the environment you're working in. I'll get to
> that.
>
> 3. Suggesting npx as a way to interact with the Cordova CLI not only
> serves the purpose of invoking the node_module/.bin entrypoint, but it
> will also already work to create a new project when cordova isn't even
> installed. This reduces the barrier of entry and establishes a way to
> interact with Cordova that will always work.
>
> It is extremely convenient and developers want convenience. If there is
> one thing we don't need in Cordova, then it is to overcomplicate things,
> frustrate developers and drive them away.
>
> 4. That being said, convenience comes at a price and Dmitry has outlined
> the issues that come with npx very well last night on Slack. I agree
> with his points and they are also my own, but I feel the benefits
> massively outweigh these risks.
>
> npx downloads packages that aren't available locally and executes them.
> This is by-design and a feature I mentioned earlier. It also opens the
> door for a myriad of security issues, as it has the potential to run
> unwanted code with every single execution of `npx cordova`.
> You just have to type `npx cordoa` once, and suddenly you get a
> typosquatted package from someone that sends off local data to the
> cloud. As a matter of fact, I published the package "rebecca" years ago
> to illustrate exactly this point. Try `npx rebecca` to see what I mean.
> While you can run npx with --no-install to avoid this, this would ruin
> any convenience we're trying to establish here.
>
> npx also adds another layer of complexity. You need an additional Node
> process to even locate the entrypoint you want to invoke, check if
> downloads need to be made and so on. This would happen every single time
> you invoke the Cordova CLI. I consider this a minor issue, but it is an
> issue nonetheless.
>
>
> With those points in mind, nobody is forced to use Cordova in the way we
> suggest in the docs. I can already install Cordova locally and use it
> with npx if I want to. Users who prefer a global installation of Cordova
> to avoid the above mentioned issues, are still free to do so and they
> should find instructions on how to set that up in the documentation.
>
> This is about suggesting to users a way to get started with Cordova with
> as little friction as possible and npx achieves this extremely well and
> leaves us with a far better project structure by default.
>
> On 10/05/2019 10:06, Jan Piotrowski wrote:
> > While that is correct, nvm-windows indeed had problems with npx not
> > working after it was first added to node - so Julio's was indeed true
> > in the past.
> > Luckily it was fixed, so even we lowly Windows users now can use npx.
> >
> > Am Fr., 10. Mai 2019 um 09:48 Uhr schrieb Oliver Salzburg
> > <oliver.salzb...@gmail.com>:
> >> npx ships with Node.
> >>
> >> On Fri, May 10, 2019, 00:33 Jesse <purplecabb...@gmail.com> wrote:
> >>
> >>> Hello Dmitry,
> >>>
> >>> In my mind, cordova-cli is intended to be installed globally, in
> situations
> >>> where that is not is possible we could *maybe* recommend that users use
> >>> npx, but I don't think it's a great experience.  btw, npx needs to be
> >>> globally installed ... so ok!?
> >>> This is really just a symptom of a bad node setup, and would never
> happen
> >>> if using nvm or similar node switcher.
> >>>
> >>> The issue raised in that thread appears to be simply related to where
> >>> config stores its data, specifically opt in/out of telemetry.
> >>>
> >>>
> >>>
> >>>
> >>> On Thu, May 9, 2019 at 2:45 PM Dmitry Blotsky <
> dmitry.blot...@gmail.com>
> >>> wrote:
> >>>
> >>>> Hi all,
> >>>>
> >>>> It’s been a while. :) I hope you’re all doing well.
> >>>>
> >>>> I’m writing to start some mailing list discussion about this GitHub
> >>> issue:
> >>>> https://github.com/apache/cordova-docs/issues/838.
> >>>>
> >>>> Please say if we should continue talking there, and we can do that
> >>> instead.
> >>>> If not, let’s continue here.
> >>>>
> >>>> It sounds like we’ve got a request to run Cordova without a global
> sudo
> >>>> install. What are the ways you all can think of to achieve this?
> >>>>
> >>>> Dmitry
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org
> > For additional commands, e-mail: dev-h...@cordova.apache.org
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org
> For additional commands, e-mail: dev-h...@cordova.apache.org
>
>

Reply via email to