่ๆฏ
umijs v4 ๅๅบ็ฐไบ umi ๅ maxใๅฆๆๅ็บงๆไบ่ ไน้ด้ๅๅบ่ฏฅๅฆไฝ้ใ
ๆฌๆๅฐ่ฏๅพไปไปฃ็ ๅฑ้ขๆฏ่พไบ่ ๏ผ่ฎฉๅคงๅฎถๅฏนไบ่ ๆไธชๆธ ๆฐ็่ฎค่ฏใ
ๆ็ซ ไปฃ็ ๅบไบ @umijs/max v4.4.9 umi v4.4.9 ๆฌๆๆฅๆ 2025-4-23ใ
TLDR
max = umi + ไธ็ณปๅ้ขๅถๆไปถ๏ผantdใๆ้ใๆฐๆฎๆตใๅพฎๅ็ซฏใtailwindcssโฆโฆ ๅฏๆ้ๅฏ็จ๏ผ
ๅฆๆไฝ ๆฏๆณๅไธไธชๅบไบ antd ็ๅคๆไธญๅๅฐ้กน็ฎ๏ผ้ๆๆ้ใๅพฎๅ็ซฏ๏ผ๏ผๆจ่ umi max๏ผๅฆๅ umiใ
ๅบๅซ
ไธใไพ่ต
max ๆฌ่บซไพ่ต
"antd": "^4.20.6",
"eslint": "8.35.0",
"stylelint": "14.8.2",
"@umijs/lint": "4.4.9",
"@umijs/plugins": "4.4.9",
"umi": "4.4.9"
-_-|| antd ้ๅคไพ่ตไบ๏ผ่ๆๆถ็ๆ็้กน็ฎไพ่ต็ๆฏ antd v5๏ผไฝๆญคๅคๅดๆฏ v4ใ
ๅฏ่ง max ๅบๅฑไพ่ต umi๏ผไฝ้ข็ฝฎไบๅ็งๆไปถ๏ผ
export default () => {
return {
plugins: [
require.resolve('@umijs/plugins/dist/access'),
require.resolve('@umijs/plugins/dist/analytics'),
require.resolve('@umijs/plugins/dist/antd'),
require.resolve('@umijs/plugins/dist/dva'),
require.resolve('@umijs/plugins/dist/initial-state'),
require.resolve('@umijs/plugins/dist/layout'),
require.resolve('@umijs/plugins/dist/locale'),
require.resolve('@umijs/plugins/dist/mf'),
require.resolve('@umijs/plugins/dist/model'),
require.resolve('@umijs/plugins/dist/moment2dayjs'),
require.resolve('@umijs/plugins/dist/qiankun'),
require.resolve('@umijs/plugins/dist/react-query'),
require.resolve('@umijs/plugins/dist/request'),
require.resolve('@umijs/plugins/dist/styled-components'),
require.resolve('@umijs/plugins/dist/tailwindcss'),
require.resolve('@umijs/plugins/dist/valtio'),
require.resolve('./plugins/maxAlias'),
require.resolve('./plugins/maxAppData'),
require.resolve('./plugins/maxChecker'),
],
};
};
ไธ่ฟฐๅ ไน้ฝๅจๆๆกฃๆไฝ็ฐๆฏๅฆ access ๆ้ๆไปถ๏ผๆๆกฃ๏ผumijs.org/docs/max/acโฆ ใๆๅ ไธช้็นๆไธ่ฎค่ฏ็็็ใ
- dva ๅบไบ redux effect yield put ็ญๆฆๅฟตๅคชๅค๏ผโไธไธ็บชโ็ไบง็ฉ๏ผไธๆจ่๏ผๆจ่ valtio ๆ่ zustand๏ผ้ umi ้กน็ฎ๏ผ ใ
- mf ModuleFederationใ
- model ๆฐๆฎๆต umijs.org/docs/max/daโฆ ๆจ่ valtioใ
- valtio ่่ๅ ้จ bigfish ไฝฟ็จ็็ถๆ็ฎก็๏ผๅบไบ proxy umijs.org/docs/max/vaโฆ
- maxAlias ๅซๅ @umijs/max => @@/exportsใ
- maxAppData ๅฐ name ๆนๆ Umi Maxใๅผๅ่ ๆ ้ๅ ณๅฟใ
- maxChecker ๆฃๆฅ max ้กน็ฎ package.json ๆฏๅฆๆไพ่ต umi ๆๅๆฅ้ๆ็คบใ
// maxAlias
import { IApi } from 'umi';
export default (api: IApi) => {
api.modifyConfig((memo) => {
memo.alias = {
...memo.alias,
'@umijs/max': '@@/exports',
};
return memo;
});
};
่ๆๆถ็ๆ็้กน็ฎไพ่ต
umi ๆนๆ @umi/max๏ผๆฐๅขไบ antd ๅ จๅฎถๆกถ
"@umijs/max": "^4.4.9",
"@ant-design/icons": "^5.0.1",
"@ant-design/pro-components": "^2.4.4",
"antd": "^5.4.0"
ไบใ็ฎๅฝ็ปๆ
Windows ่ชๅธฆ tree ้ๅธธ้พ็จ๏ผๆพๅฐไธไธช้ซ่ดจ้็ tree ๆฟไปฃๅ
pnpm i -g tree-node-cli
โฏ tree my-app -I 'node_modules'
my-app
โโโ package.json
โโโ pnpm-lock.yaml
โโโ src
โ โโโ assets
โ โ โโโ yay.jpg
โ โโโ layouts
โ โ โโโ index.less
โ โ โโโ index.tsx
โ โโโ pages
โ โโโ docs.tsx
โ โโโ index.tsx
โโโ tsconfig.json
โโโ typings.d.ts
โฏ tree my-app-max -I 'node_modules'
my-app-max
โโโ README.md
โโโ mock
โ โโโ userAPI.ts
โโโ package.json
โโโ pnpm-lock.yaml
โโโ src
โ โโโ access.ts
โ โโโ app.ts
โ โโโ assets
โ โโโ components
โ โ โโโ Guide
โ โ โโโ Guide.less
โ โ โโโ Guide.tsx
โ โ โโโ index.ts
โ โโโ constants
โ โ โโโ index.ts
โ โโโ models
โ โ โโโ global.ts
โ โโโ pages
โ โ โโโ Access
โ โ โ โโโ index.tsx
โ โ โโโ Home
โ โ โ โโโ index.less
โ โ โ โโโ index.tsx
โ โ โโโ Table
โ โ โโโ components
โ โ โ โโโ CreateForm.tsx
โ โ โ โโโ UpdateForm.tsx
โ โ โโโ index.tsx
โ โโโ services
โ โ โโโ demo
โ โ โโโ UserController.ts
โ โ โโโ index.ts
โ โ โโโ typings.d.ts
โ โโโ utils
โ โโโ format.ts
โโโ tsconfig.json
โโโ typings.d.ts
ๅฏนๆฏ
ๅ ้คไบ layout ็ฎๅฝ๏ผไผฐ่ฎกๆฏๅ
็ฝฎไบ antd pro ็ layout๏ผใๆฐๅขไบ components constants models services utils
ๆฏ่พๆๅ
ด่ถฃ็ๆฏ models services
// my-app-max/src/models/global.ts
// ๅ
จๅฑๅ
ฑไบซๆฐๆฎ็คบไพ
import { DEFAULT_NAME } from '@/constants';
import { useState } from 'react';
const useUser = () => {
const [name, setName] = useState<string>(DEFAULT_NAME);
return {
name,
setName,
};
};
export default useUser;
่ชๅจ็ๆ
โฏ cat my-app-max/src/services/demo/UserController.ts
/* eslint-disable */
// ่ฏฅๆไปถ็ฑ OneAPI ่ชๅจ็ๆ๏ผ่ฏทๅฟๆๅจไฟฎๆน๏ผ
import { request } from '@umijs/max';
/** ๆญคๅคๅ็ซฏๆฒกๆๆไพๆณจ้ GET /api/v1/queryUserList */
export async function queryUserList(
params: {
// query
/** keyword */
keyword?: string;
/** current */
current?: number;
/** pageSize */
pageSize?: number;
},
options?: { [key: string]: any },
) {
return request<API.Result_PageInfo_UserInfo__>('/api/v1/queryUserList', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}
...
ไธใ่ๆๆถ็ๆ้กน็ฎๅฏนๆฏ
umi
้ๆฉ Simple Appใ
โฏ pnpx create-umi@latest
Packages: +39
+++++++++++++++++++++++++++++++++++++++
Progress: resolved 40, reused 10, downloaded 29, added 39, done
โ create-umi
โ
โ What's the target folder name?
โ my-app
โ
โ Pick Umi App Template
โ Simple App
โ
โ Pick Npm Client
โ pnpm
โ
โ Pick Npm Registry
โ taobao
โ
โ You're all set!
โWARNโ deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other opti
ons.loading @umijs/mako-win32-x64-msvc@0.11.10: 15.68 MB/16.66 MB
Downloading @umijs/mako-win32-x64-msvc@0.11.10: 16.66 MB/16.66 MB, done
โWARNโ 12 deprecated subdependencies found: @esbuild-kit/cjs-loader@2.4.4, @esbuild-kit/core-utils@3.3.2, @esbuild-kit/esm-loader@
2.6.5, @floating-ui/react-dom-interactions@0.3.1, @humanwhocodes/config-array@0.13.0, @humanwhocodes/object-schema@2.0.3, @styleli
nt/postcss-css-in-js@0.38.0, glob@7.2.3, inflight@1.0.6, node-domexception@1.0.0, rimraf@3.0.2, stable@0.1.8
Packages: +1034
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 1115, reused 106, downloaded 927, added 1034, done
> @ postinstall F:\temp\my-app
> umi setup
info - [ไฝ ็ฅ้ๅ๏ผ] umi g tsconfig ๅฏไธ้ฎๅฎๆ้กน็ฎ็ TypeScript ้
็ฝฎใ
info - generate files
info - Preparing...
dependencies:
+ umi 4.4.9
devDependencies:
+ @types/react 18.3.20 (19.1.2 is available)
+ @types/react-dom 18.3.6 (19.1.2 is available)
+ typescript 5.8.3
โญ Warning โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ โ
โ Ignored build scripts: core-js, core-js-pure, esbuild. โ
โ Run "pnpm approve-builds" to pick which dependencies should be allowed to run scripts. โ
โ โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
Done in 1m 29.4s
\
F:\temp via Node.js v22.7.0 took 2m5s
umi max
้ๆฉ Ant Design Proใ
โฏ pnpx create-umi@latest
โ create-umi
โ
โ What's the target folder name?
โ my-app-max
โ
โ Pick Umi App Template
โ Ant Design Pro
โ
โ Pick Npm Client
โ pnpm
โ
โ Pick Npm Registry
โ taobao
โ
โ You're all set!
Downloading antd@5.24.8: 10.19 MB/10.19 MB, done
Downloading antd@4.24.16: 8.75 MB/8.75 MB, done
Downloading @formatjs/intl-displaynames@1.2.10: 5.85 MB/5.85 MB, done
โWARNโ 19 deprecated subdependencies found: @esbuild-kit/cjs-loader@2.4.4, @esbuild-kit/core-utils@3.3.2, @esbuild-kit/esm-loader@
2.6.5, @floating-ui/react-dom-interactions@0.3.1, @formatjs/intl-unified-numberformat@3.3.7, @formatjs/intl-utils@2.3.0, @humanwho
codes/config-array@0.11.14, @humanwhocodes/object-schema@2.0.3, @stylelint/postcss-css-in-js@0.38.0, @types/history@5.0.0, eslint@
8.35.0, flatten@1.0.3, glob@7.2.3, inflight@1.0.6, intl-messageformat-parser@3.6.4, node-domexception@1.0.0, react-router-redux@5.
0.0-alpha.9, rimraf@3.0.2, stable@0.1.8
Packages: +1329
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Downloading @formatjs/intl-unified-numberformat@3.3.7: 8.47 MB/8.47 MB, done
Progress: resolved 1399, reused 1027, downloaded 290, added 1329, done
> @ postinstall F:\temp\my-app-max
> max setup
info - [ไฝ ็ฅ้ๅ๏ผ] ไฝ ็ฅ้ๅฏไปฅ้่ฟ UMI_ENV ๅฎไนๅคไธช็ฏๅข็้
็ฝฎๅ๏ผ่ฏฆ่ง https://umijs.org/docs/guides/env-variables#umi_env
info - generate files
info - Preparing...
> @ prepare F:\temp\my-app-max
> husky
โWARNโ Issues with peer dependencies found
.
โโโฌ dva 2.5.0-beta.2
โ โโโ โ unmet peer react@"15.x || ^16.0.0-0": found 18.3.1
โ โโโ โ unmet peer react-dom@"15.x || ^16.0.0-0": found 18.3.1
โ โโโฌ react-redux 5.1.2
โ โโโ โ unmet peer react@"^0.14.0 || ^15.0.0-0 || ^16.0.0-0": found 18.3.1
โโโฌ @umijs/max 4.4.9
โโโฌ @umijs/plugins 4.4.9
โโโฌ @ahooksjs/use-request 2.8.15
โ โโโ โ unmet peer react@"^16.8.0 || ^17.0.0": found 18.3.1
โโโฌ react-intl 3.12.1
โ โโโ โ unmet peer react@^16.3.0: found 18.3.1
โโโฌ dva-loading 3.0.25
โโโ โ unmet peer dva-core@"^1.1.0 || ^1.5.0-0 || ^1.6.0-0": found 2.0.4
dependencies:
+ @ant-design/icons 5.6.1 (6.0.0 is available)
+ @ant-design/pro-components 2.8.7
+ @umijs/max 4.4.9
+ antd 5.24.8
devDependencies:
+ @types/react 18.3.20 (19.1.2 is available)
+ @types/react-dom 18.3.6 (19.1.2 is available)
+ husky 9.1.7
+ lint-staged 13.3.0 (15.5.1 is available)
+ prettier 2.8.8 (3.5.3 is available)
+ prettier-plugin-organize-imports 3.2.4 (4.1.0 is available)
+ prettier-plugin-packagejson 2.5.10
+ typescript 5.8.3
โญ Warning โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ โ
โ Ignored build scripts: core-js, core-js-pure, es5-ext, esbuild. โ
โ Run "pnpm approve-builds" to pick which dependencies should be allowed to run scripts. โ
โ โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
Done in 2m 49.9s
\
F:\temp via Node.js v22.7.0 took 3m22s