最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

umi4.js基本使用方法示例詳解

 更新時間:2025年09月22日 09:01:07   作者:小前端大牛馬  
Umi4已于今年6月份發(fā)布,同時支持?Vite?和?Webpack?兩種構(gòu)建方式,對詬病已久的mufs做了優(yōu)化,另外還支持vue,這篇文章主要介紹了umi4.js基本使用方法的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

1.什么是umi?

Umi,中文發(fā)音為「烏米」,是可擴展的企業(yè)級前端應用框架。Umi 以路由為基礎,同時支持配置式路由和約定式路由,保證路由的功能完備,并以此進行功能擴展。然后配以生命周期完善的插件體系,覆蓋從源碼到構(gòu)建產(chǎn)物的每個生命周期,支持各種功能擴展和業(yè)務需求。

2.umi的特性有哪些?

  1. 路由驅(qū)動:通過路由配置生成應用結(jié)構(gòu),支持動態(tài)路由、嵌套路由、權限路由等。
  2. 插件系統(tǒng):通過插件擴展功能(如國際化、代碼分割、API 請求、Ant Design 集成等)。
  3. 配置化:通過 config/config.js 或 .umirc.ts 集中配置,靈活且可擴展。
  4. 按需加載:支持代碼分割和懶加載,提升應用性能。
  5. 內(nèi)置開發(fā)工具:提供熱更新、路由跳轉(zhuǎn)、插件調(diào)試等功能。

3.umi的優(yōu)點

1、企業(yè)級,在安全性、穩(wěn)定性、最佳實踐、約束能力方面會考慮更多

2、插件化,啥都能改,Umi 本身也是由插件構(gòu)成

3、MFSU,比 Vite 還快的 Webpack 打包方案

4、基于 React Router 6 的完備路由

5、默認最快的請求

6、SSR & SSG

7、穩(wěn)定白盒性能好的 ESLint 和 Jest

8、React 18 的框架級接入

9、Monorepo 最佳實踐 

4.umi的基本使用

1. 安裝與初始化

首先得有 node,并確保 node 版本是 18 或以上。

然后需要包管理工具。node 默認包含 npm,但也可以選擇其他方案,

創(chuàng)建項目:

pnpm dlx create-umi@latest  my-app
? Install the following package: create-umi? (Y/n) · true
? Pick Npm Client ? pnpm
? Pick Npm Registry ? taobao
Write: .gitignore
Write: .npmrc
Write: .umirc.ts
Copy:  layouts/index.tsx
Write: package.json
Copy:  pages/index.tsx
Copy:  pages/users.tsx
Copy:  pages/users/foo.tsx
@ postinstall /private/tmp/sorrycc-vylwuW
umi setup
info  - generate files

//國內(nèi)建議選 pnpm + taobao 源,速度提升明顯。這一步會自動安裝依賴,同時安裝成功后會自動執(zhí)行 umi setup 做一些文件預處理等工作。
/*
執(zhí)行之后會在控制臺會出現(xiàn)用戶交互操作,按照提示來操作即可。
第一步是讓你確定項目文件夾的名稱,然后選擇項目的模版。因為在Umi3中是沒有集成一些插件的,很多的插件在項目創(chuàng)建之后在根據(jù)需要進行安裝。但是Umi4變得更加方便了,直接在項目中集成插件,然后根據(jù)需要進行啟用和關閉。
*/

 模板選項

  • Simple App:基礎項目模板,純凈版的Umi,包含umi4文檔上關于Guides下的所有功能,但是不包括Umi Max。。
  • Ant Design Pro:集成 Pro Layout 和權限系統(tǒng)的完整模板 ,包含Umi Max的完整功能,均可通過在.umirc.ts 或 config/config.ts中插拔式配置

2.啟動項目

執(zhí)行 pnpm dev 命令,

pnpm dev
        ╔═════════════════════════════════════════════════════╗
        ║ App listening at:                                   ║
        ║  >   Local: https://127.0.0.1:8000                  ║
ready - ║  > Network: https://192.168.1.1:8000                ║
        ║                                                     ║
        ║ Now you can open browser with the above addresses?? ║
        ╚═════════════════════════════════════════════════════╝
event - compiled successfully in 1121 ms (388 modules)
event - MFSU compiled successfully in 1308 ms (875 modules)

 在瀏覽器里打開 http://localhost:8000/,能看到以下界面,

3.啟用 Prettier(可選)

 如果需要用 prettier 做項目代碼的自動格式化,執(zhí)行 pnpm umi g,

pnpm umi g
? Pick generator type ? Enable Prettier -- Enable Prettier
info  - Write package.json
info  - Write .prettierrc
info  - Write .prettierignore
info  - Install dependencies with pnpm

4.umi的目錄結(jié)構(gòu)

這里羅列了 Umi 項目中約定(或推薦)的目錄結(jié)構(gòu),在項目開發(fā)中,請遵照這個目錄結(jié)構(gòu)組織代碼。

├── config/              // 配置目錄(核心)
│   └── config.ts        // 主配置文件(支持多環(huán)境配置)
├── dist/                // 構(gòu)建產(chǎn)物目錄(默認輸出路徑)
├── mock/                // 模擬數(shù)據(jù)目錄
│   └── app.ts|tsx       // Mock 數(shù)據(jù)定義入口
├── src/                 // 源碼核心目錄(開發(fā)主區(qū)域)
│   ├── .umi/            // 臨時文件目錄(框架生成,勿手動修改)
│   ├── .umi-production/ // 生產(chǎn)環(huán)境臨時文件(構(gòu)建時生成)
│   ├── layouts/         // 全局布局目錄(約定式)
│   │   ├── BasicLayout.tsx  // 基礎布局組件
│   │   └── index.less       // 布局樣式
│   ├── pages/           //頁面組件目錄(約定式路由核心)
│   │   ├── index.less   // 頁面樣式
│   │   └── index.tsx    // 頁面組件(自動映射為路由)
│   ├── models/          // 數(shù)據(jù)模型目錄(推薦)
│   ├── utils/           // 工具函數(shù)目錄(推薦)
│   ├── services/        //  服務目錄api接口配置(推薦)
│   ├── app.tsx          // 運行時配置入口(擴展生命周期)
│   └── global.less      // 全局樣式覆蓋
└── public/              // 靜態(tài)資源目錄(直接拷貝至構(gòu)建產(chǎn)物)
    └── favicon.ico      // 網(wǎng)站圖標(需與配置路徑匹配)

1. 目錄結(jié)構(gòu)詳解

package.json:與 Umi 3 不同,Umi 4 不會自動注冊 package.json 中以 @umijs/preset-、@umijs/plugin-、umi-preset- 和 umi-plugin- 開頭的插件、預設,若你需要自定義額外的插件、預設,需要手動配置到 plugins 。

.umirc.ts:與 config/config.ts 文件功能相同,2 選 1 。.umirc.ts 文件優(yōu)先級較高,區(qū)別是你可以單獨在一個 config 文件夾下集中管理所有的配置,保持項目根目錄整潔。包含 Umi 所有非運行時配置(運行時配置一般定義于 app.ts

dist 目錄:執(zhí)行 umi build 后產(chǎn)物的默認輸出文件夾。可通過 outputPath 配置修改產(chǎn)物輸出文件夾。

mock 目錄:存放 mock 文件,此目錄下所有 .ts / .js 文件會被 mock 服務加載,從而提供模擬數(shù)據(jù),使用方法詳見 Mock 。

public 目錄:存放固定的靜態(tài)資源,如存放 public/image.png ,則開發(fā)時可以通過 /image.png 訪問到,構(gòu)建后會被拷貝到輸出文件夾。

.umi 目錄.umi/ 為臨時目錄,禁止手動修改(需加入 .gitignore)。默認已在 .gitignore 被忽略。dev 時的臨時文件目錄,比如入口文件、路由等,都會被臨時生成到這里。

.env:環(huán)境變量文件(如 API_URL=http://api.example.com

app.[ts|tsx]:運行時配置文件,可以在這里擴展運行時的能力,比如修改路由、修改 render 方法等。運行時配置帶來的邏輯會在瀏覽器中運行,因此當有遠程配置、動態(tài)內(nèi)容時,這些我們在本地開發(fā)時還不確定,不能寫死,所以需要在瀏覽器實際運行項目時動態(tài)獲取他們。

// 示例:全局錯誤處理  
export function onError(error: Error) {  
  console.error('全局錯誤:', error);  
}  

 global.(j|t)sx:全局前置腳本文件。Umi 區(qū)別于其他前端框架,沒有顯式的程序主入口(如 src/index.ts),所以當你有需要在應用前置、全局運行的邏輯時,優(yōu)先考慮寫入 global.ts 。

//?全局數(shù)據(jù)共享與狀態(tài)管理?:通過 useModel 實現(xiàn)跨組件的數(shù)據(jù)共享,替代部分 dva 場景
// src/models/global.tsx  
import { useState } from 'react';  
export default () => {  
  const [globalData, setGlobalData] = useState({});  
  return { globalData, setGlobalData };  
};  
文件作用域典型場景
app.ts運行時環(huán)境(應用實例)全局狀態(tài)初始化、路由攔截、錯誤邊界處理
global.tsx全局數(shù)據(jù)共享或類型聲明跨組件狀態(tài)管理、全局類型定義

 當你需要添加全局 Context 、修改應用運行時,請使用 app.tsx 。 

2.注意

config/ 和 src/pages/ 為框架識別目錄,不可更名或刪除。

 可新增 src/components/src/hooks/ 等目錄管理公共組件或邏輯。

 通過 app.tsx 擴展運行時配置(如權限攔截、全局狀態(tài)注入)

5.umi的環(huán)境變量

1. 基礎環(huán)境變量

  • 定義方式
    在項目根目錄創(chuàng)建 .env 文件,格式為 KEY=VALUE

  • .env:基礎配置(所有環(huán)境生效)
  • .env.local:本地覆蓋配置(優(yōu)先級高于.env
  • .env.production:生產(chǎn)環(huán)境專用變量

支持變量嵌套(如CONCAT=$FOO$BAR)  

# .env
API_URL=http://api.example.com
NODE_ENV=development
  •  使用方式

在代碼中通過 process.env.KEY 訪問:

// src/services/api.ts
const BASE_URL = process.env.API_URL;

2.‌多環(huán)境配置文件

通過 UMI_ENV 指定環(huán)境,加載對應配置:

//啟動預發(fā)布環(huán)境
 UMI_ENV=staging pnpm dev

對應加載文件優(yōu)先級:config.ts → config.${UMI_ENV}.ts → config.${dev|prod|test}.ts → config.local.ts

3.運行時變量注入‌

config/config.ts中使用define字段暴露變量至前端代碼:

前端通過process.env.API_SECRET讀取值(需注意敏感信息需加密處理)

export default defineConfig({
  define: {
    'process.env.UMI_ENV': process.env.UMI_ENV || 'dev',
    'process.env.API_URL': '"https://prod.example.com"', // 需要轉(zhuǎn)義雙引號
    'process.env.API_SECRET': 'your_key_here'
  }
});

4. 構(gòu)建時注入變量

通過命令行動態(tài)覆蓋環(huán)境變量:

在啟動或構(gòu)建命令中直接傳遞變量,優(yōu)先級最高,用于臨時調(diào)試場景(如快速修改開發(fā)服務器端口) :

API_URL=http://test.example.com umi build
// 修改端口示例(跨平臺推薦 cross-env)
cross-env PORT=3000 pnpm dev

5.多環(huán)境管理規(guī)則

  1. 保留名稱限制
    dev/test/prod為框架保留值,手動設置無效,需改用自定義名稱(如stagingpre)觸發(fā)多環(huán)境配置加載。

  2. 配置文件示例
    開發(fā)環(huán)境配置(config/config.staging.ts):

export default defineConfig({
  define: {
    'process.env.API_HOST': 'https://staging.api.com'
  },
  proxy: { '/api': { target: 'http://staging.server' } }
});

6.umi的約定式路由

1.基本規(guī)則‌

1.文件路徑映射路由

Umi4 根據(jù) src/pages 目錄下的文件結(jié)構(gòu)自動生成路由配置:

pages/
├── index.tsx → path: '/'
├── about.tsx → path: '/about'
└── users/
    └── index.tsx → path: '/users'

2.嵌套路由

子目錄會生成嵌套路徑:
pages/
└── users/
    ├── index.tsx → path: '/users'
    └── list.tsx → path: '/users/list'

 生成的路由配置為:

[
  { path: '/users', component: '@/pages/users/index' },
  { path: '/users/list', component: '@/pages/users/list' },
]

 3.動態(tài)路由

動態(tài)參數(shù)路由

使用 [參數(shù)名] 包裹文件或目錄,生成動態(tài)參數(shù)路徑,組件內(nèi)通過 props.match.params 獲取參數(shù)::

pages/
└── users/
    └── [id].tsx → path: '/users/:id'
// /pages/users/[id].jsx
export default (props) => {
  const { id } = props.match.params;  // 訪問 /users/123 時 id=123
  return <div>{id}</div>;
};

 可選動態(tài)參數(shù)路由

使用 [參數(shù)名$] 標記為可選參數(shù):

//在動態(tài)路由定義中,/pages/user/[id$].jsx 表示 id 為可選,訪問 /user 和 /user/123 均可匹配該路由
pages/
└── users/
    └── [id$].tsx → path: '/users/:id?'

 4. 嵌套路由與布局

局部嵌套路由

在目錄中添加 _layout.tsx 文件,作為該目錄的布局容器,并通過 props.children 渲染子路由:

pages/
└── users/
    ├── _layout.tsx → 父路由布局
    ├── index.tsx → path: '/users'
    └── detail/[id].tsx → path: '/users/detail/:id'

 生成的路由配置為:

{
  path: '/users',
  component: '@/pages/users/_layout',
  routes: [
    { path: '/users', component: '@/pages/users/index' },
    { path: '/users/detail/:id', component: '@/pages/users/detail/[id]' },
  ],
}

 全局布局

在 src/layouts/index.tsx 定義全局布局,包裹所有路由組件。

[
  { exact: false, path: '/', component: '@/layouts/index',
    routes: [
      { exact: true, path: '/', component: '@/pages/index' },
      { exact: true, path: '/users', component: '@/pages/users' },
    ],
  },
]
// /src/layouts/index.jsx
export default ({ children }) => {
  return (
    <div>
      <Header />
      {children}
      <Footer />
    </div>
  );
};

不同的全局布局

你可能需要針對不同路由輸出不同的全局 layout,Umi 不支持這樣的配置,但你仍可以在 src/layouts/index.tsx 中對 location.path 做區(qū)分,渲染不同的 layout 。

比如想要針對 /login 輸出簡單布局

export default function(props) {
  if (props.location.pathname === '/login') {
    return <SimpleLayout>{ props.children }</SimpleLayout>
  }

  return (
    <>
      <Header />
      { props.children }
      <Footer />
    </>
  );
}

5.404 頁面

在 src/pages/404.tsx 中定義自定義 404 頁面,開發(fā)模式下需通過 /404 顯式訪問。

 注意:以下文件或目錄會被 忽略,不生成路由

  • 以 . 或 _ 開頭的文件或目錄
  • 以 d.ts 結(jié)尾的類型定義文件
  • 以 test.tsspec.ts、e2e.ts 結(jié)尾的測試文件(適用于 .js、.jsx 和 .tsx 文件)
  • components 和 component 目錄
  • utils 和 util 目錄
  • 不是 .js、.jsx、.ts 或 .tsx 文件
  • 文件內(nèi)容不包含 JSX 元素

7 umi的路由

 若配置文件(.umirc.ts 或 config/config.ts)中定義了 routes,則 禁用約定式路由,僅使用配置路由。

 在配置文件中通過 routes 進行配置,格式為路由信息的數(shù)組。

// .umirc.ts
export default {
  routes: [
    { path: '/', component: 'index' },
    { path: '/user', component: 'user' },
  ],
}

 Umi 4 默認按頁拆包,從而有更快的頁面加載速度,由于加載過程是異步的,所以往往你需要編寫 loading.tsx 來給項目添加加載樣式,提升用戶體驗。

1.屬性詳解:

  •  pathpath 只支持兩種占位符配置,第一種是動態(tài)參數(shù) :id 的形式,第二種是 * 通配符,通配符只能出現(xiàn)路由字符串的最后。
  • component:配置 location 和 path 匹配后用于渲染的 React 組件路徑??梢允墙^對路徑,也可以是相對路徑。如果是相對路徑,會從 src/pages 開始尋找。如果指向 src 目錄的文件,可以用 @,比如 component: '@/layouts/basic',推薦使用 @ 組織路由文件位置。
  • routes:配置子路由,通常在需要為多個路徑增加 layout 組件時使用。
//這樣,訪問 /list 和 /admin 就會帶上 src/layouts/index 這個 layout 組件。

export default {
  routes: [
    { path: '/login', component: 'login' },
    {
      path: '/',
      component: '@/layouts/index',
      routes: [
        { path: '/list', component: 'list' },
        { path: '/admin', component: 'admin' },
      ],
    }, 
  ],
}

 在全局布局 src/layouts/index 中,通過 <Outlet/> 來渲染子路由

  • redirect:配置路由跳轉(zhuǎn)。

//訪問 / 會跳轉(zhuǎn)到 /list 。
export default {
  routes: [
    { path: '/', redirect: '/list' },
    { path: '/list', component: 'list' },
  ],
}

 重定向時,默認不會攜帶原 url 的查詢參數(shù),如需保持原參數(shù),添加 keepQuery 選項即可:

  routes: [
    { path: '/', redirect: '/list', keepQuery: true },

    // 注:若你需在跳轉(zhuǎn)時處理參數(shù),可以自行實現(xiàn)一個跳轉(zhuǎn)組件
  ]
  •  wrappers:配置路由組件的包裝組件,通過包裝組件可以為當前的路由組件組合進更多的功能。 比如,可以用于路由級別的權限校驗:
export default {
  routes: [
    { path: '/user', component: 'user',
      wrappers: [
        '@/wrappers/auth',
      ],
    },
    { path: '/login', component: 'login' },
  ]
}

 然后在 src/wrappers/auth 中,

import { Navigate, Outlet } from 'umi'

export default (props) => {
  const { isLogin } = useAuth();
  if (isLogin) {
    return <Outlet />;
  } else{
    return <Navigate to="/login" />;
  }
}

 這樣,訪問 /user,就通過 auth 組件做權限校驗,如果通過,渲染 src/pages/user,否則跳轉(zhuǎn)到 /login。 

layout:通過配置 layout: false 可以單獨關閉某一個路由的全局布局

layout: false 僅對一級路由生效

// .umirc.ts

export default {
  routes: [
    // 取消 login 頁面的全局布局,從而自行實現(xiàn)整個頁面
    { path: '/login', component: '@/pages/Login', layout: false },
  ],
}

總結(jié)

到此這篇關于umi4.js基本使用方法的文章就介紹到這了,更多相關umi4.js詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

古田县| 万宁市| 井陉县| 都兰县| 旺苍县| 英吉沙县| 庄河市| 大姚县| 宽甸| 札达县| 五家渠市| 南皮县| 瓮安县| 海林市| 昌都县| 贵州省| 大厂| 济宁市| 达拉特旗| 凭祥市| 岳普湖县| 木里| 珠海市| 伊宁县| 长汀县| 西乌| 客服| 新建县| 龙江县| 兴隆县| 绥化市| 望奎县| 太保市| 沿河| 苍溪县| 民县| 瑞金市| 商城县| 扎鲁特旗| 银川市| 夏邑县|