umi+cross-env 工程多环境配置

概要

1. umi
2. cross-env 多环境配置

umi

简单介绍

Check umijs here

umi = roadhog + 路由 + HTML 生成 + 完善的插件机制

cross-env多环境配置

为什么需要多环境配置

一般,工程存在三个环境配置即开发环境 dev,测试环境 staging,正式环境 prod,配置中的插件,路由,语言等配置一般情况下可以在多个环境通用。
但是其中的第三方应用密钥,接口地址等都可能因为环境的改变而改变。

当需要发布至其他环境,则需要在打包前对配置进行手动的修改或替换。来让 SDK 确定打包时使用或输出后的配置文件。

cross-env

使用 cross-env,在打包使用的命令中加入环境参数的标识。让 umi 的打包省去修改配置的步骤,实现一键打包。

实操

umi 的配置可以使用.umirc.ts 或 config/config.ts,我们这里使用 config.ts 作为例子。
首先提取公共的项目配置部分保存为 config.ts。

import { IConfig } from 'umi-types'; // ref: https://umijs.org/config/

const baseConfig: IConfig = {
  treeShaking: true,
  routes: [
    {
      path: '/',
      component: '../layouts/index',
      routes: [
        {
          path: '/',
          component: './index',
        }
      ],
    },
  ],
  plugins: [
    [
      'umi-plugin-react',
      {
        antd: true,
        dva: true,
        dynamicImport: {
          webpackChunkName: true,
        },
        title: 'Demo',
        dll: true,
        locale: {
          enable: true,
          default: 'en-US',
        },
        routes: {
          exclude: [
            /models\//,
            /services\//,
            /model\.(t|j)sx?$/,
            /service\.(t|j)sx?$/,
            /components\//,
          ],
        },
      },
    ],
  ],
};
export default baseConfig;

新建 config.dev.ts,config.prod.ts,导入公共配置并加入开发环境以及正式环境的特有配置。

import { IConfig } from 'umi-types'; // ref: https://umijs.org/config/
import baseConfig from './config'; // ref: https://umijs.org/config/

const config: IConfig = {
  ...baseConfig,
  define: {
    "process.env.apiUrl": 'https://api.test.com',
    "process.env.appKey": 'key',
    "process.env.appSecret": 'secret'
  },
};

export default config;

代码中使用process.env.apiUrl即可获取到当前配置的对应值

开启 dev-server

    cross-env UMI_ENV=dev umi dev

打包

    cross-env UMI_ENV=prod umi build