• 前端快闪三:多环境灵活配置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

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

    上海鲜花港 - 郁金香
  • 相关阅读:
    为什么建立视图
    Oracle constraints type 约束类型
    python 环境
    查看oracle 数据库的编码格式
    trigger
    闪回操作 flashback
    row_number()over(partiton by order by ) rank() over(partition by order by )
    lag() 偏移
    date
    配置ES中IK分词器远程词库
  • 原文地址:https://www.cnblogs.com/JulianHuang/p/15353654.html
Copyright © 2020-2023  润新知