为何指定UMI_ENV=dev后Ant Design Pro仍使用config.local.ts?
问题场景
项目目录结构:
. └── config/ ├── config.dev.ts ├── config.local.ts ├── config.ts └── defaultSettings.ts
package.json命令配置:
"ant:start:localapi": "cross-env REACT_APP_ENV=local UMI_ENV=local HTTPS=true MOCK=none umi dev", "ant:start:devapi": "cross-env REACT_APP_ENV=dev UMI_ENV=dev HTTPS=true MOCK=none umi dev"
config.dev.ts内容:
// https://umijs.org/config/ import { defineConfig } from 'umi'; export default defineConfig({ plugins: [ 'react-dev-inspector/plugins/umi/react-inspector', ], inspectorConfig: { exclude: [], babelPlugins: [], babelOptions: {}, }, define: { 'process.env.UMI_ENV': process.env.UMI_ENV, ... }, });
运行ant:start:devapi命令时,已确认UMI_ENV被正确设置为dev,但Umi仍加载config.local.ts的配置,而非config.dev.ts。
排查与解决步骤
先确认环境变量是否真的传递成功
在config.ts中添加一行日志,启动项目后查看控制台输出:console.log('当前UMI_ENV:', process.env.UMI_ENV);或者直接在命令行验证cross-env的变量传递:
- Windows:
cross-env UMI_ENV=dev echo %UMI_ENV% - Mac/Linux:
cross-env UMI_ENV=dev echo $UMI_ENV
如果输出不是dev,说明cross-env没正确传递变量,尝试更新cross-env版本,或者换用系统原生的环境变量设置方式(比如Mac/Linux直接用UMI_ENV=dev umi dev,Windows用set UMI_ENV=dev && umi dev)。
- Windows:
检查Umi配置加载优先级
Umi的配置加载逻辑是:config.ts→config.[UMI_ENV].ts→config.local.ts,也就是说**config.local.ts会覆盖所有环境的配置**,不管你指定了什么UMI_ENV。如果不想让local配置干扰dev环境,有两种方式:- 临时重命名
config.local.ts(比如改成config.local.bak.ts),再启动dev命令测试; - 设置环境变量
UMI_LOCAL_ENV=none,禁用local配置加载,修改命令为:"ant:start:devapi": "cross-env REACT_APP_ENV=dev UMI_ENV=dev UMI_LOCAL_ENV=none HTTPS=true MOCK=none umi dev"
- 临时重命名
清理Umi缓存
Umi的缓存可能导致配置未更新,删除node_modules/.cache目录,或者启动时加上--no-cache参数:"ant:start:devapi": "cross-env REACT_APP_ENV=dev UMI_ENV=dev HTTPS=true MOCK=none umi dev --no-cache"验证配置生效情况
在config.dev.ts和config.local.ts中分别添加独特的配置项,比如:
// config.dev.tsexport default defineConfig({ ... title: 'Dev环境' });// config.local.ts
export default defineConfig({ ... title: 'Local环境' });启动后查看页面标题,就能直观判断哪个配置被加载。
内容的提问来源于stack exchange,提问作者Amr Shawki
相关产品推荐
相关产品推荐

