Enterprise-level, plugin-based React application framework with out-of-the-box functionality including routing, building, deployment, testing, and linting capabilities
npx @tessl/cli install tessl/npm-umi@4.4.0Umi is an enterprise-level, plugin-based React application framework designed to provide a simple and enjoyable web development experience. It offers out-of-the-box functionality including built-in routing, building, deployment, testing, and linting capabilities. The framework is battle-tested in enterprise environments, being used by 10,000+ applications at companies like Alibaba, Tencent, ByteDance, NetEase, and Meituan.
npm install umiimport { defineConfig, defineMock, run, Service, RUNTIME_TYPE_FILE_NAME } from "umi";For CommonJS:
const { defineConfig, defineMock, run, Service, RUNTIME_TYPE_FILE_NAME } = require("umi");Client-side plugin imports:
import { PluginManager, ApplyPluginsType } from "umi/client";Testing utilities:
import { configUmiAlias, getUmiAlias } from "umi/test";import { defineConfig } from "umi";
// Define configuration with TypeScript support
export default defineConfig({
routes: [
{ path: "/", component: "@/pages/index" },
{ path: "/users", component: "@/pages/users" },
],
plugins: ["@umijs/plugin-react"],
devServer: {
port: 3000,
},
});Umi is built around several key components:
Type-safe configuration system with helper functions for defining app configuration and mock data. Essential for setting up routing, plugins, build options, and development settings.
function defineConfig(config: ConfigType): ConfigType;
function defineMock(mockData: { [key: string]: MockDeclare }): typeof mockData;Command-line interface and service management for running development servers, building applications, and executing framework commands.
function run(opts?: IOpts): Promise<void>;
class Service extends CoreService {
constructor(opts?: any);
run2(opts: { name: string; args?: any }): Promise<any>;
}Comprehensive plugin system supporting both server-side and client-side plugins with hook management, plugin registration, and execution control.
enum ApplyPluginsType {
compose = "compose",
modify = "modify",
event = "event"
}
class PluginManager {
constructor(opts: { validKeys: string[] });
register(plugin: IPlugin): void;
applyPlugins(opts: ApplyPluginsOpts): any;
static create(opts: { validKeys: string[]; plugins: IPlugin[] }): PluginManager;
}Testing integration utilities for Jest configuration, alias resolution, and umi-specific testing setup.
function configUmiAlias(config: Config.InitialOptions): Promise<Config.InitialOptions>;
function getUmiAlias(): Promise<Record<string, string>>;
function getAliasPathWithKey(alias: Record<string, string>, key: string): string;// Main plugin API interface
interface IApi extends PluginAPI, IServicePluginAPI {
// Extensive plugin API with add, modify, and event methods
}
// Route configuration
interface IRoute {
path: string;
component?: string;
routes?: IRoute[];
exact?: boolean;
[key: string]: any;
}
// API request/response classes for API routes
class UmiApiRequest {
params: Record<string, string>;
body: any;
headers: Record<string, string>;
method: string;
query: Record<string, string | string[]>;
cookies: Record<string, string>;
url: string;
pathName: string;
readBody(): Promise<any>;
}
class UmiApiResponse {
status(code: number): UmiApiResponse;
header(key: string, value: string): UmiApiResponse;
setCookie(key: string, value: string): UmiApiResponse;
end(data?: string): void;
text(data: string): void;
html(data: string): void;
json(data: any): void;
}
// Configuration types
type ConfigType = IConfigFromPlugins & IConfig;
// Mock data types
type MockDeclare = string | number | null | undefined | boolean | Record<string, any> | RequestHandler;
// CLI options
interface IOpts {
presets?: string[];
}
// Plugin interfaces
interface IPlugin {
path?: string;
apply: Record<string, any>;
}
interface ApplyPluginsOpts {
key: string;
type: ApplyPluginsType;
initialValue?: any;
args?: object;
async?: boolean;
}