This is a short demo to walk you through the deployment of a React and Express application on Structure.
Let's start out by making sure we have all of the requirements for this demo. All we will need is Structure and create-react-app. Go ahead and run:
sudo pip install structure
npm install -g create-react-app
Great! Now let's set up our Express application.
mkdir hello-react
cd hello-react
touch server.js
Now, copy and paste this code into server.js. All this does is return the static files from your built React app. We'll create those next!
Note: Structure requires your port to be 80.
const express = require("express");
const path = require("path");
const app = express();
const port = process.env.PORT || 80;
// Serve any static files built by React
app.use(express.static(path.join(__dirname, "client/build")));
app.get("/", function(req, res) {
res.sendFile(path.join(__dirname, "client/build", "index.html"));
});
app.listen(port, () => console.log(`Listening on port ${port}`));
Now that we have an Express server ready to go, let's build a React app. To do this, simply run:
create-react-app client
Create a package.json using the command touch package.json inside your /hello-react folder.
Paste the code below into package.json.
{
"name": "hello-world",
"version": "1.0.0",
"scripts": {
"start": "npm run build-client && node server",
"start-local": "npm run build-client && PORT=8080 node server",
"build-client": "cd client && npm run build && cd .."
},
"dependencies": {
"express": "^4.16.2"
}
}
Let's look at this a little more closely. When we upload this application to Structure, Structure will recursively install all package.json dependencies throughout our entire project. It will then run npm start. If we look at our package.json here, we can see that the start script will run a build-client and node server command. The build-client command moves into our /client folder, builds the React application, and then moves back to the /hello-react folder. The node server command then starts the Express server.
This is the hard part so pay close attention. While inside the /hello-react folder, run the command
structure deploy hello-react
That's it! Not hard at all, thanks to Structure. Don't believe me? Check out https://hello-react-<your-structure-user-name>.structure.sh
There it is. A fully functioning Express/React app deployed and live on Structure.
If you have any comments or suggestions for us, please reach out at help@structure.sh