Those are best practices if your goal is to stick with javascript no matter what, which is not the goal of the comparison. Resorting to a transpiler which adds whole new complexity dimensions and failure points to your build, and doing so while aiming to introduce a complex workflow that requires half a dozen modules to become manageable is far from the ideal solution.
What? The entire post was about comparing JavaScript to alternatives which use... compilers/transpilers:
GWT - Java-source-to-JS, server and client-side framework
TeaVM - Java-bytecode-to-JS compiler
JSweet - Java-source-to-JS (and TypeScript) compiler with library ecosystem
CheerpJ - Full JVM implementation on the browser
Vaadin Flow - Java-source-to-JS-source, server and client-side framework
Bck2Brwsr - Java-bytecode-to-JS compilerUndoubtedly there exist better combinations of tools, but as someone just starting front end exploration, knowing what is the right combination is virtually impossible.
Even if you make it to the create-react-app page, the official documentation doesn't make a recommendation among three separate build options (npx, npm, yarn) and two app start options (npm start or yarn start). Worse, there's no explanation of why one would choose one method over another.
My experience with React is this type of muddled guidance is very common throughout the ecosystem.
https://github.com/facebook/create-react-app#quick-overview
EDIT: For reference, the URL where I see the ambiguous startup steps: https://www.google.com/search?client=firefox-b-1-d&q=create-...
- "To create a new app, you may choose one of the following methods:" (then suggests npx, npm, or yarn)
- "npm start or yarn start
Runs the app in development mode."
- Even from right below the anchor you linked:
"(npx comes with npm 5.2+ and higher, see instructions for older npm versions)"
This is in reference to the overview commands of
npx create-react-app my-app cd my-app npm start
which add to the ambiguity further down the page...Should I use npm or npx? Can I mix them? The quick overview uses both.
This is all confusing to newbies. I have no idea why they don't pick one way to do things (or at least explain why one might choose one vs the other).
To me it seems obvious that you use npx unless you're stuck with an older npm version, or you're already using yarn.
Why couldn't they just write that you should use npx if you have it? Or, since it works using npm too, why not just tell everyone to use npm?
There are so many non-obvious things here.
Why do we run some binaries via npm and others via npx? If you're going to use npm to run all the commands after create-react-app, why include npx in the document at all?
If you use npx to create an app per the directions, why does the animated output tell you to use yarn to start it (and not npm as in the text immediately above)? Why does the animation then ignore the output and use npm to start it?
The answers to these types of questions may be known to someone immersed in the ecosystem, but the presentation on the official page is definitely muddled and makes the answers far from obvious.
First of all, Parcel is a dead simple to use bundler that supports JSX, hot reloading, code splitting, and various file types (including TypeScript) out of the box: https://parceljs.org
Second, that React code is much longer than it needs to be, mostly due to formatting, but if you use function components and React "Hooks" it can be extremely short:
With the imports and call to "render" it's about 15 lines of code, which is much shorter than all of his other examples.The class version (written how I'd do it) is about 25 lines, which still shorter. Here it is without JSX, using Preact's HyperScript-style `h` instead of `React.createElement`:
And of course these are toy applications, which aren't even representative of real applications. I'm not sure I can go back to imperative UI toolkits like GWT, etc.The application size seems approximately accurate, but if you really care about bundle size you could use Preact (which supports most of React's features). The brings the bundle size down to about 10KB, which is also much smaller than his examples.
Load time is also unfair due to lack of bundling.