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

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

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


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


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


或者你会这样手写 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业务配置。

相关文章
|
18天前
|
移动开发 前端开发 JavaScript
前端vue2、vue3去掉url路由“ # ”号——nginx配置(一)
前端vue2、vue3去掉url路由“ # ”号——nginx配置
52 0
|
13天前
|
开发框架 Dart 前端开发
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
【4月更文挑战第30天】对比 Flutter(Dart,强类型,Google支持,快速热重载,高性能渲染)与 React Native(JavaScript,庞大生态,热重载,依赖原生渲染),文章讨论了开发语言、生态系统、性能、开发体验、学习曲线、社区支持及项目选择因素。两者各有优势,选择取决于项目需求、团队技能和长期维护考虑。参考文献包括官方文档和性能比较文章。
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
|
18天前
|
前端开发 JavaScript 应用服务中间件
前端vue2、vue3去掉url路由“ # ”号——nginx配置(二)
前端vue2、vue3去掉url路由“ # ”号——nginx配置
52 0
|
4天前
|
资源调度 前端开发 JavaScript
nvm,npm,yarn相关指令,前端配置准备
nvm,npm,yarn相关指令,前端配置准备
7 1
|
13天前
|
前端开发 JavaScript 开发者
【专栏:HTML与CSS前端技术趋势篇】前端框架(React/Vue/Angular)与HTML/CSS的结合使用
【4月更文挑战第30天】前端框架React、Vue和Angular助力UI开发,通过组件化、状态管理和虚拟DOM提升效率。这些框架与HTML/CSS结合,使用模板语法、样式管理及组件化思想。未来趋势包括框架简化、Web组件标准采用和CSS在框架中角色的演变。开发者需紧跟技术发展,掌握新工具,提升开发效能。
|
14天前
|
开发框架 缓存 前端开发
|
18天前
|
前端开发 JavaScript 数据可视化
前端vite+vue3——自动化配置路由布局
前端vite+vue3——自动化配置路由布局
31 0
|
18天前
|
前端开发 JavaScript Linux
relectron框架——打包前端vue3、react为pc端exe可执行程序
relectron框架——打包前端vue3、react为pc端exe可执行程序
30 1
|
18天前
|
前端开发 数据可视化 API
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏(二)
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏
32 0
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏(二)
|
18天前
|
前端开发 JavaScript CDN
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏(一)
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏
31 0