Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Document multiple build environments via env-cmd #4071 #4117

Merged
merged 6 commits into from
Apr 15, 2018
Merged
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions packages/react-scripts/template/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2196,6 +2196,67 @@ If you are not using the HTML5 `pushState` history API or not using client-side

This will make sure that all the asset paths are relative to `index.html`. You will then be able to move your app from `http://mywebsite.com` to `http://mywebsite.com/relativepath` or even `http://mywebsite.com/relative/path` without having to rebuild it.

#### Building for Multiple Environments
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change this to something like "Customizing Environment Variables for a Build"


Applications are generally split between different environments such as staging, production, and development. To allow the app to run in these different environments one must set environment variables to be able to conditionally run different processes depending on the specified environment.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove lines 2201 through 2209. It's explained elsewhere how Create React App handles environment variables and we don't need to cover it again.


`create-react-app` handles environment variables in a specific way. [Adding Custom Environment Variables](https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/template/README.md#adding-custom-environment-variables)

1. You cannot override `NODE_ENV`, it is always set to `'production'`

2. It is mandated that you prefix any custom environment variables with `REACT_APP_`

- This means you cannot run:

- `NODE_ENV=staging npm run build`

- But you can run:

- `REACT_APP_NODE_ENV=staging npm run build`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think using NODE_ENV and REACT_APP_NODE_ENV for this example is potentially confusing. The similar names implies that there is some connection between them. The example we commonly use is something like REACT_APP_API_URL which is set to one value in .env.production or .env and then overridden for other environments.


When the environment variable is set you can then do conditionals within your code:

```js
if (process.env.REACT_APP_NODE_ENV === 'staging') {
analytics.setEnvironment('staging');
}
```

Though, you should write this command within your `package.json` :

```js
{
// ...
"scripts": {
"build:staging": "REACT_APP_NODE_ENV=staging npm run build",
// ...
}
// ...
}
```

But, the ideal way is to use `.env` files as you can specify many environment variables simultaneously. This can be done as so:

Within `.env.staging` write this:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These instructions should mention the env-cmd package and how to install it.


`REACT_APP_NODE_ENV=staging`

and within your `package.json`:

```js
{
// ...
"scripts": {
"build:staging": "env-cmd .env.staging npm run build",
// ...
}
// ...
}
```
Then run `npm run build:staging`

You may use `.env.production` as the fallback option in this case as `'production'` is the default `NODE_ENV`

### [Azure](https://azure.microsoft.com/)

See [this](https://medium.com/@to_pe/deploying-create-react-app-on-microsoft-azure-c0f6686a4321) blog post on how to deploy your React app to Microsoft Azure.
Expand Down