Minimal React Setup
Spring 2019

React is a browser-side Javascript library (other prominent examples are Angular and D3). It does not need to be written using any particular development environment or served from any particular server configuration.

JSX, on the other hand, is an extension to the Javascript language. You do not need it to use React, but most people like it. We need to compile JSX files into Javascript in order to use them in our programs. JSX is compiled by the Babel compiler. To install Babel on our server, use npm in your root server directory (the one with your server file, eg. miniServer3.js), as usual: npm init -y
npm install babel-cli@6 babel-preset-react-app@3
The first line installs a package.json file in your server directory, that npm uses to to keep track of complex module dependencies. The second line installs Babel in node_modules. Run the compiler on a specific file, eg. lango.jsx, like this: npx babel lango.jsx --presets react-app/prod > lango.js Npx is a command that runs a module in node_modules (notice so far we have just required modules in our Node programs, we haven't run them). Run the compiler on all .jsx files in the current directory and its subdirectories like this: npx babel --presets react-app/prod --extensions ".jsx" . --out-dir To avoid having to type all those options, you can create an alias in UNIX (you know this, right?), like this: alias jsxcomp="npx babel --presets react-app/prod --extensions ".jsx" . --out-dir ." Now you can run the compiler on all your .jsx files by typing: jsxcomp To have this alias around all the time, add the alias line to the bottom of the ~/.profile file in your home directory. This file containts UNIX shell commands that are run every time you log in.

Finally, people seem to like having their .jsx files compiled automatically. To keep the compiler lurking in the background, ready to compile any .jsx file that changes, you can use the command: npx babel src --out-dir . --presets react-app/prod --watch & You will see your .jsx files magically recompiled every time you save. I personally don't use this.