I think there is a disconnect on the actual proposal here. Here's the pr again ( keep the discussion here please ) https://github.com/apache/cordova-docs/pull/987/files
The only real use of npx as a one-off command would be the call to create a new app. ie. `npx cordova create dirname ...` The instructions after that are to cd into the dir, and install cordova locally. All npx calls after that are run from inside a project folder and are just the same as npm run commands, they access the binary exported in node_modules/cordova That said, I do still think npx should be presented as an alternative, and not necessarily the 'preferred' way. On Wed, May 15, 2019 at 10:38 PM Dmitry Blotsky <dmitry.blot...@gmail.com> wrote: > In terms of exposure, btw, npx is indeed strictly worse than npm install. > It checks for dependencies, installs them, and runs them: all at every call > of a command. That is more frequent than how often anyone runs npm install, > and is more overhead than running a shell command directly. > > From a higher-up perspective though: every other software ecosystem gets > by with just running commands in a shell. How is our situation so > outlandish that the most time-tested tools don’t meet our command-running > needs? > > Dmitry > > > On May 15, 2019, at 22:29, Dmitry Blotsky <dmitry.blot...@gmail.com> > wrote: > > > > If it’s any convincing data: none of React Native, Ionic, Angular, > Ember, Meteor, or Vue mention npx. > > > > They all recommend npm install -g or some variant using more mature > tools. > > > > I agree that it would be a piece of cake for us to instruct people to > install cordova for the local user, or to use per-project installs of > cordova. These options are all still pretty convenient, and don’t incur the > security penalties of npx. > > > > Dmitry > > > >> On May 15, 2019, at 02:15, Jesse <purplecabb...@gmail.com> wrote: > >> > >> Given how contentious this has become, I think our best approach would > be > >> to continue with our global install expectation, and add documentation > on > >> a) what to do if you have issues with `npm i -g cordova` [1] > >> b) document how to do local dependencies and use npx ( this might be a > good > >> blog post as well as permanent documentation ) > >> > >> Regarding some of the issues stated previously: > >> > >>>> Dmitry: 1. It is strictly less secure than the status quo, and all > >> alternatives. .. > >> The exposure to the user is no different than `npm install -g`, it is > just > >> harder to know exactly what is happening. > >> > >>>> Dmitry: 2. It is strictly less stable than a local installation ... > >> Only the first `npx cordova create ...` will result in a fetch, further > >> uses of npx cordova will use the cached version, and can be done > without a > >> network connection. > >> > >>>> Darryl: Encouraging people to install Cordova globally causes issues > >> when working on multiple projects ... > >> Do we have a way of knowing how often this occurs? It sounds rare to me. > >> Regardless, there is no reason they can't go ahead install > cordova@version > >> as a dev dependency > >> > >> Personally, having read up on npx and done some basic tests, I am okay > with > >> it. However, I also don't feel we have to force it on everyone. > >> We can suggest is as an alternative, and perhaps after we are all more > >> comfortable with it, it can become the default. > >> > >> > >> [1] > >> > https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally > >> > >> > >> > >> > >> On Tue, May 14, 2019 at 8:12 PM gandhi rajan <gandhiraja...@gmail.com> > >> wrote: > >> > >>> Hi Dmitry, > >>> > >>> I second you on this. > >>> > >>>> On Tuesday, May 14, 2019, Dmitry Blotsky <dmitry.blot...@gmail.com> > wrote: > >>>> > >>>> I'm really glad this discussion lit up, because it clearly shows that > >>> this > >>>> issue isn't settled. > >>>> > >>>> I personally have few opinions about the "best" solution here, but I > >>>> firmly believe that npx is a non-starter for these 2 reasons: > >>>> 1. It is strictly less secure than the status quo, and all > alternatives. > >>>> It is literally downloading code from hundreds of untrusted parties > and > >>>> immediately running it. It's worse than piping a curl command into > bash > >>> (at > >>>> least you can check the curl command's URL, or checksum the downloaded > >>>> script). > >>>> 2. It is strictly less stable than a local installation because now > every > >>>> call to Cordova goes through an opaque dependency. > >>>> > >>>> Unless both of those can be addressed, I think we shouldn't consider > npx. > >>>> > >>>> Dmitry > >>>> > >>>>> On May 10, 2019, at 4:31 PM, Oliver Salzburg < > >>> oliver.salzb...@gmail.com> > >>>> wrote: > >>>>> > >>>>> Our DX is not good and this proposal would have the potential to > have a > >>>>> positive impact on that. I'm sorry that you're not convinced yet. > >>>>> > >>>>> Because I don't want to skip back and forth between GitHub and the > >>>>> mailing list, I'll address your points here. > >>>>> > >>>>> - When you start a new project, unless you create a new cordova > project > >>>>> every week, you'll download cordova. npx will only help you in > >>>>> downloading the package and if you have downloaded it in the past, it > >>>>> will be pulled from the cache. > >>>>> > >>>>> - Yes, the Cordova CLI behavior can change over time, which is > exactly > >>>>> why you would not want to share a single global version with all of > >>> your > >>>>> projects. I consider this a pro-local point. > >>>>> > >>>>> - It is 4 more characters to type. Yes. I give you that. But if you > >>> want > >>>>> to interact with a local installation of cordova, what exactly is the > >>>>> alternative? Not installing locally? I disagree. > >>>>> > >>>>> - Your suggestion regarding writing a completely new module to > initiate > >>>>> a cordova project is completely besides the point here. If you had > that > >>>>> module, you'd still want to use it with npx. And using `npx cordova` > >>>>> pulls cordova into the cache where you are going to want to have it > >>>>> anyway. If you had a slimmed down module, you now still need to > >>> download > >>>>> cordova. > >>>>> > >>>>> By using npx, given your usage examples, you would have less > downloads > >>>>> instead of more. > >>>>> > >>>>> I'm sorry, Brody, I don't see your points and I don't feel like they > >>>>> have been weighed appropriately against the benefits I proposed > >>> earlier. > >>>>> > >>>>> I would also appreciate it if we could try to keep the conversation > to > >>> a > >>>>> single media. The split between mailing list and GitHub is not > >>>> constructive. > >>>>> > >>>>> Almost like putting part of your application in a global context and > >>>>> another part in a local context is not constructive... > >>>>> > >>>>>> On 2019-05-10 23:08, Chris Brody wrote: > >>>>>> I am very sorry to say that I am still not convinced about this > idea. > >>>>>> I just raised some concerns in a recent comment in: > >>>>>> https://github.com/apache/cordova-docs/issues/838 > >>>>>> > >>>>>> And I think I am not the only one right now. > >>>>>> > >>>>>> As I said in cordova-docs#838, I would favor that we mention using > >>>>>> `npx cordova` *as an option* in a limited number of places. > >>>>>> > >>>>>> I would like to express my appreciation to Oliver for the time and > >>>>>> effort has given to improve the documentation, and to contribute a > >>>>>> number of updates and fixes in the past. But I would rather take the > >>>>>> extra time and effort to ensure we keep up the best app DX we can. > >>>>>> > >>>>>> And I don't really follow what you mean about CORDOVA_CMDLINE, would > >>>>>> probably be easiest if we keep it in a separate discussion thread or > >>>>>> issue. > >>>>>> > >>>>>> On Fri, May 10, 2019 at 3:05 PM Oliver Salzburg > >>>>>> <oliver.salzb...@gmail.com> wrote: > >>>>>>> > >>>>>>> I have already started working on a PR to make the necessary > changes > >>> to > >>>>>>> the documentation, as I was under the impression that consensus > >>>>>>> regarding this issue was already reached: > >>>>>>> > >>>>>>> https://github.com/apache/cordova-docs/pull/987 > >>>>>>> > >>>>>>> Specifically this might be of interest: > >>>>>>> > >>>>>>> https://github.com/apache/cordova-docs/blob/ > >>>> 04363c2796199f5379fa2b5f000099ac8b1a488a/www/docs/en/dev/ > >>>> guide/cli/index.md > >>>>>>> > >>>>>>> I believe installing the cordova dependency as a devDependency > should > >>>> be > >>>>>>> part of the "create" task. I was planning to propose the necessary > >>>>>>> changes in another PR, but the freshly ignited debate caused me to > >>> hold > >>>>>>> on that. > >>>>>>> > >>>>>>> I also brought up another area of concern regarding CORDOVA_CMDLINE > >>> in > >>>>>>> hooks. I mentioned this in the PR. > >>>>>>> > >>>>>>> > >>>>>>>> On 2019-05-10 20:42, Jesse wrote: > >>>>>>>> Also thanks for the comprehensive write-up Oliver! > >>>>>>>> > >>>>>>>> Yeah, I am good with a move to recommend npx. > >>>>>>>> I just ran thru the steps and everything seems to work fine with > it. > >>>>>>>> > >>>>>>>> One other reservation I had was just about network usage, and > being > >>>>>>>> sensitive to places where bandwidth during the day is extremely > >>>> costly. I > >>>>>>>> verified that having previously installed platforms android+ios in > >>>> other > >>>>>>>> projects, I was able to `npx cordova platform add android` with > the > >>>> network > >>>>>>>> off and it used a cached version. > >>>>>>>> > >>>>>>>> Are our new getting started steps going to be this ?: > >>>>>>>> ``` > >>>>>>>> npx cordova create myNewCordovaApp > >>>>>>>> cd myNewCordovaApp > >>>>>>>> npm i cordova --save-dev > >>>>>>>> npx cordova platform add android > >>>>>>>> npx cordova run android > >>>>>>>> ``` > >>>>>>>> > >>>>>>>> I believe we may also find some issues around cordova-lib having > >>>>>>>> expectations of number of args and how it outputs some error > >>>> messages, but > >>>>>>>> hopefully tests will reveal those. > >>>>>>>> > >>>>>>>> Cheers, > >>>>>>>> Jesse > >>>>>>>> > >>>>>>>> > >>>>>>>>> On Fri, May 10, 2019 at 2:46 AM <raphine...@gmail.com> wrote: > >>>>>>>>> > >>>>>>>>> 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 > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> > >>>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > --------------------------------------------------------------------- > >>>>>>> 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 > >>>>>> > >>>>> > >>>>> > >>>>> --------------------------------------------------------------------- > >>>>> To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org > >>>>> For additional commands, e-mail: dev-h...@cordova.apache.org > >>>>> > >>>> > >>>> > >>> > >>> -- > >>> Regards, > >>> Gandhi > >>> > >>> "The best way to find urself is to lose urself in the service of others > >>> !!!" > >>> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org > For additional commands, e-mail: dev-h...@cordova.apache.org > >