umi环境变量的配置是在.umirc.ts文件中的,其中包含了proxy代理等umi配置项的设置及环境变量。
如下所示:
import { defineConfig } from 'umi';
export default defineConfig({
routes: [{...}],
define: {
// 'process.env': 'dev', // 值可以是字符串 也可以是对象
'process.env': { // 环境变量设置,可根据需要自定义
UMI_ENV: 'dev',
GLOBAL_SECRETKEY: 'MKKJKJSDFEWWEGG@DEV',
},
},
alias: {
'@': '/src',
},
proxy: { ... },
// ...其他参数
})
根据Umi的配置文档,我们发现,配置多个环境的环境变量需要创建并写入多个.umirc文件。
假设我们有4个环境需要配置:
- 开发环境:
.umirc.dev.ts
- 测试环境:
.umirc.st.ts
- 预发布环境:
.umirc.uat.ts
- 生产环境:
.umirc.prod.ts
package.json
的scripts
配置如下:
"scripts": {
"start": "umi dev",
"build": "cross-env UMI_ENV=dev umi build",
"build:st": "cross-env UMI_ENV=st umi build",
"build:uat": "cross-env UMI_ENV=uat umi build",
"build:prod": "cross-env UMI_ENV=prod umi build",
"postinstall": "umi generate tmp",
"prettier": "prettier --write '**/*.{js,jsx,tsx,ts,less,md,json}'",
"test": "umi-test",
"test:coverage": "umi-test --coverage"
},
问题来了,当我们yarn build
部署的时候报错了,没有找到构建文件。
为什么会如此?因为umi默认的.umirc.ts
文件没有配置,umi
是通过打包命令,合并基础文件及打包命令指定的文件的,基础文件就是.umirc.ts
,而合并的文件是.umirc.dev.ts
,后者会把前者有的配置值覆盖