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

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

你有没有遇到过这样的情况!比如你们有四种(或更多)环境:开发环境(本地调式代码环境)、测试环境(脏数据环境)、预生产环境(无限接近生产环境)、生产环境(正式环境或线上环境)等等环境。而对于不同环境你的静态资源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'

项目完整的package.json文件

{
  "name": "hz_dingding_fe",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "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"
  },
  "repository": {
    "type": "git",
    "url": "git@gitlab.iwhalecloud.com:citybrain/hzjwczxt/hz_dingding_fe.git"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@cbd/eslint": "^0.0.60",
    "babel-eslint": "^10.0.1",
    "eslint": "^5.12.1",
    "eslint-config-airbnb": "^17.1.0",
    "eslint-config-prettier": "^3.5.0",
    "eslint-plugin-import": "^2.14.0",
    "eslint-plugin-jsx-a11y": "^6.1.2",
    "eslint-plugin-react": "^7.12.4",
    "pre-commit": "^1.2.2",
    "cross-env": "^5.2.0",
    "lint-staged": "^8.1.0"
  },
  "dependencies": {
    "@cbd/fetch-mobile": "^0.3.1",
    "@cbd/icon": "^0.0.101",
    "@cbd/theme": "^0.2.53",
    "@cbd/umirc-dva": "^0.2.54",
    "@cbd/utils": "^0.2.53",
    "antd-mobile": "^2.2.8",
    "classnames": "^2.2.6",
    "dingtalk-jsapi": "^2.7.6",
    "dva": "^2.4.1",
    "query-string": "5",
    "react": "^16.4.2",
    "react-dom": "^16.4.2",
    "react-helmet": "^5.2.0",
    "react-resizable": "^1.10.1",
    "react-router-dom": "^4.3.1",
    "umi": "^2.4.3",
    "umi-plugin-react": "^1.7.6"
  },
  "prettier": {
    "trailingComma": "es5"
  },
  "lint-staged": {
    "*.{js,jsx}": [
      "eslint --fix",
      "git add"
    ]
  },
  "pre-commit": [
    "lint-staged"
  ]
}

参考资料

react-多环境配置
UmiJS 配置 define

相关文章
|
2月前
|
人工智能 数据可视化 安全
把 Claude Cowork 换成开源版——OpenWork 让团队 AI 配置不再各配各的
OpenWork是开源AI工作流中枢,以MCP协议统一管理团队的Skill、API连接与模型服务,支持Codex/Claude/Cursor等多客户端共享能力,提供Den控制台实现权限管控、插件分发与私有化部署,让AI工具配置成为可复用、可审计的团队资产。(239字)
260 1
|
10月前
|
人工智能 关系型数据库 API
AI数字员工哪个好?2025十大品牌云原生适配实测:玄晶引擎/百度/阿里全链路方案
本文基于阿里云生态实测,解析AI数字员工从“可视化”到“业务落地”的转型趋势,揭露选型两大陷阱,结合玄晶引擎等50+案例与API性能数据,发布十大品牌榜单。聚焦云原生架构、API对接效率、开发友好度与全链路闭环四大维度,提供中小微企业至中大型企业的优选方案及开发者专属选型工具包,助力低成本高效落地。
1247 8
|
4月前
|
存储 人工智能 安全
从openclaw到国产龙虾,AI智能体工具技术架构全景分析
国产AI智能体工具在2024-2026年间形AI智能体工具技术架构全景分析:混合架构与一体化方案的演进路径 成了多样化的技术实现路径。本文从架构设计、部署模式、生态策略等维度,对主流产品进行系统性技术分析,为开发者与企业提供客观的技术选型参考。
548 0
|
开发框架 人工智能 Cloud Native
破茧成蝶:阿里云应用服务器让传统J2EE应用无缝升级AI原生时代
一场跨越20年的技术对话:在杭州某科技园的会议室里,一场特殊的代码评审正在进行。屏幕上同时展示着2005年基于WebLogic开发的供应链系统和2025年接入DeepSeek大模型的智能调度方案——令人惊叹的是,二者的核心业务代码竟保持着惊人的一致性。"我们保住了20年积累的238个核心业务对象,就像修复传世名画时保留了每一笔历史痕迹。"企业CTO的感慨,揭开了阿里云应用服务器助力传统系统智能化转型的奥秘。
743 13
|
11月前
|
机器学习/深度学习 人工智能 前端开发
终端里的 AI 编程助手:OpenCode 使用指南
OpenCode 是开源的终端 AI 编码助手,支持 Claude、GPT-4 等模型,可在命令行完成代码编写、Bug 修复、项目重构。提供原生终端界面和上下文感知能力,适合全栈开发者和终端用户使用。
61279 11
Node安装版本低于工程版本时打包绕过校验
在开发中,若本地Node版本低于项目配置要求,导致打包报错(如图所示),可在不变更本地环境的情况下,通过在执行`npm run build`前输入命令`set NODE_OPTIONS=--openssl-legacy-provider`来绕行此问题,确保构建顺利进行。
1236 10
|
人工智能 算法 网络协议
Apipost协议全栈支持+国密算法,调试效率飙出星际!
Apipost是一款强大的API研发管理工具,支持多种协议调试与文档生成。它涵盖HTTP、gRPC、WebSocket、SSE、TCP及金融协议等,提供灵活操作技巧如国密算法支持、实时日志推送、GraphQL可视化查询等。其高效性帮助开发者减少切换工具的时间成本,专注于核心业务逻辑实现,提升开发效率并简化工作流程。
789 2
|
SQL Java Android开发
Mat使用详解
Mat使用详解
|
关系型数据库 数据挖掘 数据库
在 PostgreSQL 中使用 IN
【8月更文挑战第12天】
1474 0
在 PostgreSQL 中使用 IN
|
弹性计算 安全 网络安全
基于阿里云云平台快速实现网络入侵检测 (IDS) 及网络安全监视 (NSM)
数据包捕获是一个重要组件,可以实施网络入侵检测系统 (IDS) 并执行网络安全监视 (NSM)。 我们可以借助开源 IDS 工具来处理数据包捕获,并检查潜在网络入侵和恶意活动的签名。 使用网络观察程序提供的数据包捕获,可以分析网络中是否存在任何有害入侵或漏洞,Suricata 就是这样的一种开源工具,它是一个 IDS 引擎,可使用规则集来监视网络流量,每当出现可疑事件时,它会触发警报。 Suricata 提供多线程引擎,意味着它能够以更高的速度和效率执行网络流量分析,在本文中将会介绍到如何在 ECS 中使用Suricata来对网络进行入侵检测,同时并根据Suricata中给定的威胁规则匹配的
2467 0
基于阿里云云平台快速实现网络入侵检测 (IDS) 及网络安全监视 (NSM)

热门文章

最新文章