# React + env-cmdrc 指定環境變數
###### tags: `React` `env-cmd` `env-cmdrc` `configure`
在部署到不同環境上時,會需要配置不同的環境變數。
## 配置步驟:
### 1. 安裝
```
yarn add env-cmd
```
### 2. 建立 `.env-cmdrc` 定義環境變數
```
{
"dev": {
"REACT_APP_BASEURL": "dev"
},
"release": {
"REACT_APP_BASEURL": "release"
},
"prod": {
"REACT_APP_BASEURL": "production"
}
}
```
### 3. 修改 `package.json` 裡的 `script` 指令
([這裡是使用 craco 去啟動](https://hackmd.io/@yellow/S1mlj0yCK))
script 的 key 可以自行命名(start:dev),執行指令`env-cmd ...`, `-e` 是指定 rc 檔案(就是`.env-cmdrc`)裡面的 key name, `dev`, `release`, `prod`,並使用 craco 啟動
```json
"scripts": {
"start:dev": "env-cmd -e dev craco start",
"build:dev": "env-cmd -e dev craco build",
"start:release": "env-cmd -e release craco start",
"build:release": "env-cmd -e release craco build",
"start:prod": "env-cmd -e prod craco start",
"build:prod": "env-cmd -e prod craco build",
}
```
----
#### 這裡也可以依照環境分成多個 `.env` 檔案
建立以下三個檔案
```
# .env.development
REACT_APP_BASEURL=dev
# .env.release
REACT_APP_BASEURL=release
# .env.production
REACT_APP_BASEURL=production
```
執行指令改成 `-f`, 指定env 檔案
```json
"scripts": {
"start:dev": "env-cmd -f .env.dev craco start",
"build:dev": "env-cmd -f .env.dev craco build",
"start:release": "env-cmd -f .env.release craco start",
"build:release": "env-cmd -f .env.release craco build",
"start:prod": "env-cmd -f .env.prod craco start",
"build:prod": "env-cmd -f .env.prod craco build",
}
```
<br />
還有很多種用法,像在 shell 中臨時環境變數,或是自定 env path
#### Reference
- [添加自定义环境变量](https://www.html.cn/create-react-app/docs/adding-custom-environment-variables/)
- [更多用法 >> ](https://www.npmjs.com/package/env-cmd)
- [或是直接去看看一堆範例 >> ](https://github.com/toddbluhm/env-cmd-examples)