Vite 中按需加载异步组件与路由配置的核心是动态 import() 结合框架路由懒加载语法:Vue 项目直接在路由 component 中使用 () => import('./xxx.vue'),Vite 自动拆分 chunk;React 项目需配合 lazy + Suspense,并在顶层包裹 Suspense;可通过 / webpackChunkName: "xxx" / 注释命名 chunk,build 后通过 dist 目录或 Network 面板验证。

在 Vite 中实现按需加载的异步组件与路由配置,核心是结合 动态 import() 与 Vue Router 的懒加载语法(或 React Router 的 lazy + Suspense),让组件只在路由匹配时才加载,减少首屏体积。
Vue 项目:用 defineAsyncComponent + 路由懒加载
Vue 官方推荐在路由中直接使用动态 import(),无需额外封装。Vite 会自动将该模块拆分为独立 chunk:
- 确保已安装
vue-router@4 - 路由配置中,组件字段写成函数形式:
() => import('./views/Home.vue') - Vite 会识别该语法,生成单独的 JS chunk(如
Home.abc123.js)
示例(router/index.ts):
import { createRouter, createWebHistory } from 'vue-router'
<p>const routes = [
{
path: '/',
component: () => import('@/views/Home.vue') // ✅ 自动按需加载
},
{
path: '/about',
component: () => import('@/views/About.vue')
}
]</p><p>export default createRouter({
history: createWebHistory(),
routes
})React 项目:配合 Suspense + lazy
React 需借助 React.lazy 和 <suspense></suspense> 实现路由级懒加载。Vite 默认支持,无需额外插件:
立即学习“Java免费学习笔记(深入)”;
- 用
React.lazy(() => import('./pages/Dashboard'))包裹组件 - 所有懒加载组件必须放在
<suspense fallback="{...}"></suspense>内渲染 - 推荐在顶层路由出口(如
<router></router>下)包裹一层<suspense></suspense>
示例(main.tsx 或路由文件):
import { lazy, Suspense } from 'react'
import { createBrowserRouter } from 'react-router-dom'
<p>const Home = lazy(() => import('./pages/Home'))
const Profile = lazy(() => import('./pages/Profile'))</p><p>export const router = createBrowserRouter([
{
path: '/',
element: (
<Suspense fallback={<div>Loading...</div>}></p><Home /></Suspense>
)
},
{
path: '/profile',
element: (
<Suspense fallback={<div>Loading...</div>}><Profile /></Suspense>
)
}
])优化:给动态 import 添加 webpackChunkName 注释(Vite 兼容)
Vite 支持 /* @vite-ignore */ 和 /* webpackChunkName: "xxx" */ 注释(用于命名 chunk,便于调试和缓存管理):
- 写法:
() => import(/* @vite-ignore */ /* webpackChunkName: "user" */ './views/User.vue') - Vite 会保留该注释,并将 chunk 命名为
user.[hash].js - 注意:
@vite-ignore是可选的,仅当编辑器报错时添加(避免 TS 报 warning)
验证是否生效
运行 vite build 后检查 dist 目录:
- 查看是否有多个
chunk-xxx.js或带路径名的 js 文件(如views-Home.vue.f1a2b3c.js) - 打开浏览器开发者工具 → Network 标签 → 切换路由,观察是否只加载对应 chunk
- 使用
vite-plugin-inspect插件可图形化查看 chunk 拆分情况



















