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

Reply via email to