前端快闪三:多环境灵活配置React

开发 前端
一般会使用npm run build或者yarn build构建出静态资源, 由web服务器承载。你会体验到:多环境:test、staging、prod,他们都是独立服务器、不同的主机名,需要打不同的包。

[[426688]]

本文转载自微信公众号「精益码农」,作者有态度的马甲。转载本文请联系精益码农公众号。

你已经使用Create React App[1] 脚手架搭建了React应用,现在该部署了。

一般会使用npm run build或者yarn build构建出静态资源, 由web服务器承载。

你会体验到:多环境:test、staging、prod,他们都是独立服务器、不同的主机名,需要打不同的包。

[[426689]]

或者你会这样手写 if/else来配置不同环境的后端API基地址:

api-config.js

  1. let backendHost; 
  2. const apiVersion = 'v1'
  3.  
  4. const hostname = window && window.location && window.location.hostname; 
  5.  
  6. if(hostname === 'realsite.com') { 
  7.   backendHost = 'https://api.realsite.com'
  8. else if(hostname === 'staging.realsite.com') { 
  9.   backendHost = 'https://staging.api.realsite.com'
  10. else if(/^qa/.test(hostname)) { 
  11.   backendHost = `https://api.${hostname}`; 
  12. else { 
  13.   backendHost = process.env.REACT_APP_BACKEND_HOST || 'http://localhost:8080'
  14.  
  15. export const API_ROOT = `${backendHost}/api/${apiVersion}`; 

然后在你的应用文件api.js, 导入这个配置:

  1. import {API_ROOT} from './api-config' 
  2. function getUsers() { 
  3.    return  fetch('${API_ROOT}/users'
  4.       .then(res=> res.josn) 
  5.       .then(json=> json.data.users) 

终究不够优雅。

构建时变量织入

要提醒的概念是:

环境变量是在构建阶段被织入,一旦完成构建过程,构建的产出物中变量值就被固定了(不论产出物被放置到哪个服务进程、哪个环境)。

毕竟React应用是作为静态资源运行在浏览器上,而到了浏览器, 就no sense with环境变量。

Case1. 通过环境变量配置后端基地址

Create React APP脚手架创建了react应用,可通过全局的process.env来获取环境变量。

1.process.env.NODE_ENV在构建时被设置为production。

2. 还可以使用REACT_APP_开头的环境变量来配置proces.env.

  1. REACT_APP_API_HOST= example.com yarn run build 
  2. # 将产生如下效果: 
  3. process.env.REACT_APP_API_HOST ="example.com" 
  4. process.env.NODE_ENV ="production" 

怎么设置环境变量?

windows: set/setx命令; linux: export命令,这里不赘述。

Case2 .env文件

临时环境变量可以影响全局process.env的下级变量值, 但是不够方便,Create React App支持使用.env文件来固定存储环境变量值。

创建.env文件,内容如下;

  1. REACT_APP_SPECIAL_FEATURE=true 
  2.  
  3. REACT_APP_API_HOST=default-host.com 

上面的环境变量打包后将会在development、test、production生效。

如果你要为不同环境设置变量,可放置.env.development、env.test、.env.production 文件。 

再提醒一句:环境变量不仅可以用来配置后端基地址,还可以灵活的作为react app业务配置。

 

责任编辑:武晓燕 来源: 精益码农
相关推荐

2023-04-12 07:55:24

Web前端工程化

2021-09-27 06:29:02

React开发模式

2021-09-26 06:43:08

快闪前端文件

2015-02-11 10:21:07

JavaScript

2010-08-06 10:30:53

配置VLANHyper-V

2018-11-08 23:09:20

零售快闪店转型

2022-08-05 08:17:39

数据库隔离域名

2010-08-06 10:36:54

VLAN配置Hyper-V

2022-02-16 19:42:25

Spring配置开发

2020-11-05 10:40:07

Spring Boot多模块Java

2019-01-16 09:40:16

微信多闪马桶

2019-08-12 09:36:49

2013-06-28 09:35:04

Hypervisor虚拟化成本

2019-11-19 15:36:42

JavaJava升级编程语言

2020-03-09 10:09:18

混合云云计算

2017-09-11 14:35:34

编辑器开发环境React

2018-11-09 17:00:36

湘潭京东云无界零售

2018-08-03 10:39:13

快闪

2012-05-10 10:00:43

2012-05-10 09:15:47

点赞
收藏

51CTO技术栈公众号