UMI+DVA根据开发环境和生产环境不同动态加载变量

2024-04-06 07:08

本文主要是介绍UMI+DVA根据开发环境和生产环境不同动态加载变量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

你有没有遇到过这样的情况!比如你们有四种(或更多)环境:开发环境(本地调式代码环境)、测试环境(脏数据环境)、预生产环境(无限接近生产环境)、生产环境(正式环境或线上环境)等等环境。而对于不同环境你的静态资源host地址或者你的用户id等等可能是不一样的

只区分开发环境和生产环境

使用默认的环境变量 process.env.NODE_ENV
运行npm run start

console.log(process.env); // > {NODE_ENV: "development"}// NODE_ENV === "development" 开发环境 ; NODE_ENV === "production" 生产环境if (process.env.NODE_ENV === "production") {// 生产环境需要的操作setTitle(t);}

多个环境

umi 允许在 .umirc.js 或 config/config.js (二选一,.umirc.js 优先)中进行配置,支持 ES6 语法。
企业开发中通常会区分多个不同的环境,比如开发环境,测试环境,正式环境。不同个环境中需要请求不同的接口。

UMI_ENV

指定覆盖默认配置的配置文件。比如 UMI_ENV=prod umi build,那么则会用 .umirc.prod.js 覆盖 .umirc.js。或者是 config/config.prod.js 覆盖 config/config.js。注意是覆盖而不是替换,.umirc.prod.js 中没有的配置者会使用 .umirc.js 中的配置。

另外,开发模式下 .umirc.local.js 或者 config/config.local.js 中的配置永远是优先级最高的。

编码实战

step1 下载 cross-env 插件

npm install --save-dev cross-env

step2 新建配置文件

根目录下新建此格式的.umirc.参数名.jsjs文件,示例如下
在这里插入图片描述
文件内容如下

// .umirc.prod.js 或者 config/config.prod.js
export default {define: {"process.env": {NODE_ENV: 'prod'}, // 修改process.env对象数据GLOBAL_VAR: "global_var", // 直接增加全局变量},
};

step3 修改package.json文件

修改后内容如下

 "scripts": {"start": "umi dev","build": "umi build","build:test": "cross-env UMI_ENV=test umi build","build:prod": "cross-env UMI_ENV=prod umi build","eslint": "eslint --ext .js --ext .jsx ./src","lint-staged": "lint-staged"},

step4 修改js文件,根据环境变量进行不同输出

console.log('GLOBAL_VAR', GLOBAL_VAR) // > global_var
console.log('process.env.NODE_ENV', process.env.NODE_ENV) // > prod// NODE_ENV === "development" 开发环境 ; NODE_ENV === "production" 生产环境
if (process.env.NODE_ENV === "prod") {// 生产环境需要的操作
}

step5 运行命令

命令结构如下npm run build:参数名

npm run build:prod

此处参数名未新建配置文件处的参数名

step6 观察控制台打印

'GLOBAL_VAR', 'global_var'
'process.env.NODE_ENV', 'prod'

参考资料

react-多环境配置
UmiJS 配置 define

这篇关于UMI+DVA根据开发环境和生产环境不同动态加载变量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/879316

相关文章

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

Python变量与数据类型全解析(最新整理)

《Python变量与数据类型全解析(最新整理)》文章介绍Python变量作为数据载体,命名需遵循字母数字下划线规则,不可数字开头,大小写敏感,避免关键字,本文给大家介绍Python变量与数据类型全解析... 目录1、变量变量命名规范python数据类型1、基本数据类型数值类型(Number):布尔类型(bo

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF