## 开发环境和生产环境

`uni-app` 可通过 `process.env.NODE_ENV` 判断当前环境是开发环境还是生产环境。一般用于连接测试服务器或生产服务器的动态切换。

- 在 HBuilderX 中，点击“运行”编译出来的代码是开发环境，点击“发行”编译出来的代码是生产环境
- cli 模式下，是通行的编译环境处理方式。

```javascript
if (process.env.NODE_ENV === 'development') {
	console.log('开发环境');
} else {
	console.log('生产环境');
}
```

如果你需要自定义更多环境，比如测试环境：

- 假设只需要对单一平台配置，可以 package.json 中配置，在 HBuilderX 的运行和发行菜单里会多一个出来。[https://uniapp.dcloud.io/collocation/package](https://uniapp.dcloud.io/collocation/package)
- 如果是针对所有平台配置，可以在 vue-config.js 中配置。[https://uniapp.dcloud.io/collocation/vue-config](https://uniapp.dcloud.io/collocation/vue-config)

**快捷代码块**

HBuilderX 中敲入代码块 `uEnvDev`、`uEnvProd` 可以快速生成对应 `development`、`production` 的运行环境判定代码。

```javascript
// uEnvDev
if (process.env.NODE_ENV === 'development') {
	// TODO
}
// uEnvProd
if (process.env.NODE_ENV === 'production') {
	// TODO
}
```

## 判断平台

平台判断有 2 种场景，一种是在编译期判断，一种是在运行期判断。

- 编译期判断
  编译期判断，即条件编译，不同平台在编译出包后已经是不同的代码。详见：[条件编译](/platform)

```javascript
// #ifdef H5
alert('只有h5平台才有alert方法');
// #endif
```

如上代码只会编译到 H5 的发行包里，其他平台的包不会包含如上代码。

- 运行期判断
  运行期判断是指代码已经打入包中，仍然需要在运行期判断平台，此时可使用 `uni.getSystemInfoSync().platform` 判断客户端环境是 Android、iOS 还是小程序开发工具（在百度小程序开发工具、微信小程序开发工具、支付宝小程序开发工具中使用 `uni.getSystemInfoSync().platform` 返回值均为 devtools）。

```javascript
switch (uni.getSystemInfoSync().platform) {
	case 'android':
		console.log('运行Android上');
		break;
	case 'ios':
		console.log('运行iOS上');
		break;
	default:
		console.log('运行在开发者工具上');
		break;
}
```

如有必要，也可以在条件编译里自己定义一个变量，赋不同值。在后续运行代码中动态判断环境。

## 其他环境变量

其他环境变量的定义方式参考 [环境变量](/tutorial/env)。
