zoukankan      html  css  js  c++  java
  • 前端快闪三:多环境灵活配置react

    你已经使用Create React App脚手架搭建了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应用是作为静态资源运行在浏览器上,而浏览器并不知道有环境变量这个概念。

    case1. 通过环境变量配置 react后端地址

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

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

    2. 还可以使用REACT_APP_开头的环境变量来配置react构建时能用的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文件来固定存储环境变量值。

    REACT_APP_SPECIAL_FEATURE=true
    REACT_APP_API_HOST=default-host.com
    

    上面的环境变量将会在development、test、production中加载,

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


    本文来自博客园,作者:{有态度的马甲},转载请注明原文链接:https://www.cnblogs.com/JulianHuang/p/15353654.html

    欢迎关注我的原创高价值公众号

    上海鲜花港 - 郁金香
  • 相关阅读:
    第三方驱动备份与还原
    Greenplum 解决 gpstop -u 指令报错
    yum安装(卸载)本地rpm包的方法(卸载本地安装的greenplum 5.19.rpm)
    Java JUC(java.util.concurrent工具包)
    netty 详解(八)基于 Netty 模拟实现 RPC
    netty 详解(七)netty 自定义协议解决 TCP 粘包和拆包
    netty 详解(六)netty 自定义编码解码器
    netty 详解(五)netty 使用 protobuf 序列化
    netty 详解(四)netty 开发 WebSocket 长连接程序
    netty 详解(三)netty 心跳检测机制案例
  • 原文地址:https://www.cnblogs.com/JulianHuang/p/15353654.html
Copyright © 2011-2022 走看看