After an ‘npm install cordova’ all ‘npx cordova ..’ ARE calls to node_modules/cordova ...
> On May 27, 2019, at 5:01 PM, Dmitry Blotsky <dmitry.blot...@gmail.com> wrote: > > 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 >>> >>> > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org For additional commands, e-mail: dev-h...@cordova.apache.org