Even if we agree to use NPX for the initial Cordova run, using it in every call instead of "./node_modules/.bin/cordova" introduces major failure modes.
Dmitry > On May 15, 2019, at 11:32 PM, Jesse <purplecabb...@gmail.com> wrote: > > 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 >> >>