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 !!!"