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

0781fa9529e15cf25c19da0547d6581b.gif

大前端快闪:package.json文件知多少?

大前端快闪二:react开发模式 一键启动多个服务

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

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

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

99ca78db4ebc118cf5c790019950df1e.png


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

api-config.js

let backendHost;
const apiVersion = 'v1';

const hostname = window && window.location && window.location.hostname;

if(hostname === 'realsite.com') {
  backendHost = 'https://api.realsite.com';
} else if(hostname === 'staging.realsite.com') {
  backendHost = 'https://staging.api.realsite.com';
} else if(/^qa/.test(hostname)) {
  backendHost = `https://api.${hostname}`;
} else {
  backendHost = process.env.REACT_APP_BACKEND_HOST || 'http://localhost:8080';
}

export const API_ROOT = `${backendHost}/api/${apiVersion}`;

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

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

终究不够优雅。


快闪三:react工程化:通过环境变量灵活配置react

构建时变量织入

要提醒的概念是:

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

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

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

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

1.process.env.NODE_ENV在构建时被设置为production。2. 还可以使用REACT_APP_开头的环境变量来配置proces.env.

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

怎么设置环境变量?
windows: set/setx命令; linux: export命令,这里不赘述。

Case2 .env文件

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

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

REACT_APP_SPECIAL_FEATURE=true
REACT_APP_API_HOST=default-host.com

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

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


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

 性感豹纹

0989e39401247cdd14c0d5d9e97f459f.gif 鹅厂二面,Nginx回忆录

1d7b95d69a96be191759fe86cc8fe7a9.gif 前后端分离,如何在前端项目中动态插入后端API基地址?(in docker)

0536c74a806328dfad3f0a2d7dbd3ca6.gif 前端镜像打包这么慢,你该反省一下

e6ce1e8391ef34bb8fe1c36d275cbc12.gif

 谁说docker-compose不能水平扩展容器、服务多实例?

e84b6ec8298f96ce62d7dcfe97b4e066.gif

 面试官:单点登录你搞过吗?

453b36210c2fb0c1c870cc59d42f70bc.gif

 难缠的布隆过滤器,这次终于通透了

引用链接

[1] Create React App: https://github.com/facebook/create-react-app

01569ebe7b61aebecab9cbedf7b7dc4a.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有态度的马甲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值