Setting up a React development environment can be confusing and daunting to newcomers. You often heard developers saying different packages like babel, webpack, es6 and etc. are needed (not entirely true) as well. With React getting more popular, there are a fews boilerplate project aim to help developer create a suitable React development environment.

create-react-app is one of the most popular starter template. The aims is to allow developers to create React app with zero build configuration. Developers no longer have to worry about how should webpack be setup, what should be configured with babel to use es6, which linter and test package to use. Everything will just work out of the box. Yes, is so easy!

For developers who needed to touch the underlying configuration, it have a npm run eject that will allow developers to mess with the configuration and do what couldn’t be done previously. Only thing to note is, once eject is run, it cannot be reversed.

Development Stack for React

The following guide aim to help developers build a Continuous Integration and Continuous Deployment stack for React app. We will be using CircleCI, CodeClimate and Heroku. If you do not have a account at any of the service above, head over to sign up one, is FREE!.

Sample Project

At the end, we would have a React app in Github Repo that will automatically deploy any changes on master branch to Heroku after all tests passes. Here is a sample of the deployed React website. Visual feedback will also provide on pull request like this:

Lets Start!

First step is to follows the create-react-app guide to create a new app. Do this:

$ npm install -g create-react-app

$ create-react-app my-react-app
$ cd my-react-app/
$ npm start

Then browser should automatically open a page at http://localhost:3000/. If you see a Welcome to React page running, everything is good.

CircleCI Setup

Next, we need to add a little configuration to setup CircleCI for our project. Create a circle.yml in the root directory and add the following:

machine:
  node:
    version: 6.0.0
test:
  override:
    - npm test -- --coverage
  post:
    - npm install -g codeclimate-test-reporter
    - codeclimate-test-reporter < coverage/lcov.info

We have to use node v6 because create-react-app only works with v6 and above. We override the test to run the option with npm test — —coverage to gather coverage report. At the end, we install codeclimate-test-reporter to send the coverage report located at coverage/lcov.info to CodeClimate.

Setup Git

Create a repo in Github and do the following:

$ git init
$ git remote add origin git@github.com:username/new-repo-here
$ git add .
$ git commit -m "first commit"
$ git push -u origin master

This would push the project that we had created into the github.

Build and Test the Project

Head over to CircleCI, sign in and build the newly created project. At the end of the build, you should see a all green like this:

Setup CodeClimate

Now, head over to CodeClimate, sign in and build the created github project. We should get this at the end of analyse:

In order to use Test Coverage feedback, we will also need to copy the Test Reporter ID from Settings > Test Coverage and add it into CircleCI environment variable.

In CircleCI, navigate to Project > Settings > Environment variable and add CODECLIMATE_REPO_TOKEN with copied id.

Heroku Deployment Setup

In order to deploy React on Heroku , we will use a buildpack. Do the following:

$ heroku create REPLACE_APP_NAME_HERE --buildpack https://github.com/mars/create-react-app-buildpack.git
$ git push heroku master
$ heroku open

We pushed the latest master branch to heroku with git push heroku master. A webpage will be open at the end showing the Welcome to React page.

Next, we will have to navigate to the newly create app in Heroku Dashboard to setup automated deployment. Do the following on the dashboard:

  • Go to Deploy tab and Connect to the correct github repo.
  • Enable Automatic deployment and check Wait for CI to pass before deploy

We are done!

With a few setup, we have a fully automated continuous integration and deployment suite ready. Now with every commit that is pushed to GitHub, it will send a trigger to CircleCI and CodeClimate. Once the test passed, if it was on the master branch, it will also be automatically deployed to Heroku.

View the sample repo here and the sample deployed website here !