This commit is contained in:
Mars Hall
2017-01-30 14:29:39 -08:00
commit 0f8d98090a
16 changed files with 1554 additions and 0 deletions

73
README.md Executable file
View File

@@ -0,0 +1,73 @@
# create-react-app with a Node API on Heroku
Example app combining a React UI (from [create-react-app](https://github.com/facebookincubator/create-react-app)) with a custom Node/Express server.
If you simply want to deploy a React app, try [create-react-app-buildpack](https://github.com/mars/create-react-app-buildpack).
## Design Points
* Node server
* [`package.json`](package.json), at the root
* `postinstall` script performs React app's `npm install` on deploy to Heroku
* `cacheDirectories` includes `react-ui/node_modules/` to speed up subsequent deploys to Heroku
* serves `../react-ui/build/` as static files
* `npm` works normally
* React app
* [`react-ui/package.json`](react-ui/package.json), in a subdirectory
* as generated by create-react-app
* plus the `proxy` config enables dual-process (hot-reloading React UI + Node API) for local development
* `npm` must be run against the subdirectory
* use the prefix option, `npm start --prefix react-ui`, or
* change directories `cd react-ui/` to use `npm`
* Heroku
* **heroku/node** buildpack will auto-detect via `package.json`
* `npm install` for server & `postinstall` for React UI will automatically run
* `npm start` will automatically launch
## Punchline
Demo deployment: [https://cra-node.herokuapp.com/](https://cra-node.herokuapp.com/)
Example API call is [fetched from relative URL](react-ui/src/App.js#L16).
## Deploy to Heroku
```bash
git clone https://github.com/mars/heroku-cra-node.git
cd heroku-cra-node/
heroku create
git push heroku master
```
## Local Development
### Run the API Server
In a terminal:
```bash
# Initial setup
npm install
# Start the server
npm start
```
### Run the React UI
The React app is configured to proxy backend requests to the local Node server. (See [`"proxy"` config](react-ui/package.json))
In a separate terminal from the API server, start the UI:
```bash
# Initial setup
npm install --prefix react-ui
# Start the server
npm start --prefix react-ui
```